拖动;列表框项目和国际象棋棋盘之间的下降

时间:2012-07-23 07:53:06

标签: c# wpf

我正试图找到一种方法来拖拽使用WPF在Listbox项目和棋盘之间删除。我左边有一个列表框,右边有一个棋盘。如何拖动项目然后拖动到棋盘的一个或多个方格中。然后点击广场,将显示有关此处项目的一些信息。如果有人可以帮助我,我很感激吗?谢谢大家。

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

嗨,这是一种让你朝着正确方向前进的方法

http://johnnblade.wordpress.com/2012/06/12/drag-and-drop-grid-control-row-devexpress-wpf/

让我知道你可能有更多问题

答案 2 :(得分: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分配给你的棋盘或棋盘物品...尝试修改代码我想你会得到它

答案 3 :(得分:0)

这已经过时了,但我找到了一个KISS解决方案。

使用TextBlocks或网格中的图像创建国际象棋棋盘格。

为要传递的数据创建模型。

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方块的样式。 (一个用于白色,一个用于黑色!)

Learn how here

然后在你的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();
    }