我正在尝试找到一种使用 WPF 在列表框项目和棋盘之间拖放的方法。我在左边有一个列表框,在右边有一个棋盘。如何拖动一个项目,然后拖动到棋盘的一个或多个方格中。然后点击方块,这里会显示一些关于物品的信息。如果有人可以帮助我,我将不胜感激?谢谢大家。
问问题
673 次
4 回答
1
于 2012-07-23T07:54:51.520 回答
0
嗨,这是一种让您朝着正确方向前进的方法
http://johnnblade.wordpress.com/2012/06/12/drag-and-drop-grid-control-row-devexpress-wpf/
让我知道你可以有更多的问题吗
于 2012-07-23T07:56:27.993 回答
0
这是我做的事情..但在这里我将文件从桌面拖到我的列表框
` 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();
}
}
然后将itemsource分配给你的棋盘或棋盘项目......尝试修改我认为你会得到它的代码
于 2012-07-23T12:57:41.650 回答
0
这很旧,但我找到了一个 KISS 解决方案。
使用网格中的文本块或图像创建您的棋盘网格。
为要传递的数据创建模型。
在 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 方块的样式。(一个白色,一个黑色!)
然后在你的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();
}
于 2013-02-17T07:48:30.393 回答