2010-01-27 95 views
2

有一个列表框,其中包含一些项目。还有一个3x3矩阵的网格。用户将拖动一个项目并放置一个网格单元格。在ListBox项目和WPF中的网格单元之间拖放?

我发现的大多数样本都是关于从一个列表框拖放到另一个列表框的。但我想放入一个网格单元。我怎样才能做到这一点?

请指教。感谢 PJ

回答

4

请,检查下面的例子会为你工作:

XAML:

<Grid> 
    <ListBox Height="100" HorizontalAlignment="Left" Margin="56,65,0,0" 
      Name="listBox1" VerticalAlignment="Top" Width="120" 
      PreviewMouseLeftButtonDown="listBox1_PreviewMouseLeftButtonDown"> 
     <ListBoxItem Content="one" /> 
     <ListBoxItem Content="two" /> 
     <ListBoxItem Content="three" /> 
    </ListBox> 
    <Grid Height="100" HorizontalAlignment="Left" Margin="238,65,0,0" Name="grid1" 
      VerticalAlignment="Top" Width="200" ShowGridLines="True" TextBlock.Drop="grid1_Drop"> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Row="0" Grid.Column="0" AllowDrop="True"></TextBlock> 
     <TextBlock Grid.Row="0" Grid.Column="1" AllowDrop="True"></TextBlock> 
     <TextBlock Grid.Row="1" Grid.Column="0" AllowDrop="True"></TextBlock> 
     <TextBlock Grid.Row="1" Grid.Column="1" AllowDrop="True"></TextBlock> 

    </Grid> 
</Grid> 

代码:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void listBox1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     object item = listBox1.SelectedItem; 
     if (item != null) 
      DragDrop.DoDragDrop(listBox1, item, DragDropEffects.Move); 
    } 

    private void grid1_Drop(object sender, RoutedEventArgs e) 
    { 
     TextBlock textBlock = e.Source as TextBlock; 
     Console.WriteLine("drop item into grid column:{0} row:{1}", 
      Grid.GetColumn(textBlock), Grid.GetRow(textBlock)); 

     DataObject item = (((DragEventArgs)e).Data) as DataObject; 
     ListBoxItem listItem = item.GetData(typeof(ListBoxItem)) as ListBoxItem; 
     textBlock.Text = listItem.Content.ToString(); 
    } 
} 

希望这会有所帮助,至于

+0

感谢为回应。尽管小问题..在网格xaml代码中,以下代码是不可接受的。 TextBlock.Drop =“grid1_Drop” 您意味着要附加处理程序的事件? – 2010-01-31 06:14:50

+1

嗯..对我来说工作很不错;我在发布之前实际上已经尝试过这些代码您可以尝试将放置事件定义移至xaml中的文本框 – 2010-01-31 18:43:37