WPF を使用して、リストボックスの項目とチェス盤の間でドラッグ アンド ドロップする方法を見つけようとしています。左側にリストボックス、右側にチェス盤があります。アイテムをドラッグしてから、チェス盤の 1 つまたは複数のマスにドラッグするにはどうすればよいですか。次に、四角をクリックすると、ここにある項目に関する情報が表示されます。誰かが私を助けてくれれば幸いです。みんなありがとう。
4 に答える
これはあなたに役立つと思います:http ://www.c-sharpcorner.com/uploadfile/dpatra/drag-and-drop-item-in-listbox-in-wpf/
これは古いですが、私はこれに対するKISSソリューションを見つけました。
グリッド内のTextBlockまたは画像を使用してチェス盤グリッドを作成します。
渡されるデータのモデルを作成します。
xmlでこれを行います:
<TextBlock x:Name="myname" x:Uid="myname" Grid.Row="0" Grid.Column="1" Margin="3" Text="{Binding myfield}" Style="{DynamicResource myStyle}" AllowDrop="True" Drop="Square_Drop"/>
<TextBlock x:Name="myname" x:Uid="myname" Grid.Row="1" Grid.Column="1" Margin="3" Text="{Binding myfield}" Style="{DynamicResource myStyle}" AllowDrop="True" Drop="Square_Drop"/>
//etc etc etc
<ListBox x:Name="myListBox" x:Uid="myListBox"
ItemContainerStyle="{DynamicResource myListBoxListItemStyle}" Margin="10"
DisplayMemberPath="myField"
PreviewMouseLeftButtonDown="List_PreviewMouseLeftButtonDown">
TextBlock/Imageの正方形のスタイル設定にリソースを使用することを強くお勧めします。(1つは白、もう1つは黒です!)
次に、背後のC#で次のものが必要になります。
private void List_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (myListBox.SelectedItem != null)
{
ListBox parent = (ListBox)sender;
myModel data = parent.SelectedItem as myModel;
if (data != null)
{
DragDrop.DoDragDrop(parent, data, DragDropEffects.Move);
}
}
}
private void Square_Drop(object sender, DragEventArgs e)
{
MyModel data = e.Data.GetData(typeof(MyModel)) as MyModel;
TextBlock tb = sender as TextBlock;
tb.DataContext = data;
//Add any database update code here
refreshInterface();
}
こんにちはここにあなたを正しい方向に導く方法があります
http://johnnblade.wordpress.com/2012/06/12/drag-and-drop-grid-control-row-devexpress-wpf/
他に質問があるかもしれませんが、教えてください
これが完了したことです..しかし、ここでファイルをデスクトップからリストボックスにドラッグします
` public MainPage()
{
InitializeComponent();
CompositionTarget.Rendering +=new EventHandler(CompositionTarget_Rendering);
FileBoard.Drop += new DragEventHandler(FileBoard_Drop);
}
`
要素をドラッグしたとき
void FileBoard_Drop(object sender, DragEventArgs e)
{
if (e.Data != null)
{
FileInfo[] files = e.Data.GetData(DataFormats.FileDrop) as FileInfo[];
foreach (FileInfo fi in files)
{
_files.Enqueue(fi);
}
}
}
リストDATAinGridを作成する
CompositionTargetRendering を使用すると、ファイルをデキューできます
private void CompositionTarget_Rendering(Object sender, EventArgs e)
{
if (_files.Count != 0)
{
// Create a photo
FileInfo fi = _files.Dequeue();
}
}
次に、アイテムソースをボードまたはチェスボックスのアイテムに割り当てます...コードを変更してみてください。取得できると思います