2011-05-26 113 views
2

我正在使用拖放在我的程序中,它运作良好。但是我正在处理一个列表框中的单词列表,当我选择一个单词并将其拖动到另一个列表框时,用户不再知道他选择了哪个单词,因为第一个列表框中的“视觉”选项不会不会出现。有谁知道我如何看到列表框中的选定项目?在实现拖放操作之前,选择单词时所选单词会变成另一种颜色,但是当我添加拖放操作时,我再也看不到它了。谁能帮我?wpf拖放视觉选择项目

http://img196.imageshack.us/img196/8408/imgmt.jpg

private void lstAlleTabellen_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     startpoint = e.GetPosition(null); 
    } 

    private void lstAlleTabellen_MouseMove(object sender, MouseEventArgs e) 
    { 
     // Get the current mouse position 
     System.Windows.Point mousePos = e.GetPosition(null); 
     Vector diff = startpoint - mousePos; 

     if (e.LeftButton == MouseButtonState.Pressed && 
      Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance || 
      Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance) 
     { 
      // Get the dragged ListViewItem 
      System.Windows.Controls.ListBox listAlle = sender as System.Windows.Controls.ListBox; 
      ListBoxItem listItem = 
       FindAnchestor<ListBoxItem>((DependencyObject)e.OriginalSource); 
      Tabel tabel=new Tabel(); 
      try 
      { 
       // Find the data behind the ListViewItem 
       tabel = (Tabel)listAlle.ItemContainerGenerator. 
        ItemFromContainer(listItem); 


       // Initialize the drag & drop operation 
       DataObject dragData = new DataObject("myFormat", tabel); 
       DragDrop.DoDragDrop(listItem, dragData, DragDropEffects.Move); 
      } 
      catch 
      { 
      } 
     } 
    } 

    private static T FindAnchestor<T>(DependencyObject current) where T : DependencyObject 
    { 
     do 
     { 
      if (current is T) 
      { 
       return (T)current; 
      } 
      current = VisualTreeHelper.GetParent(current); 
     } 
     while (current != null); 
     return null; 
    } 
    private void lstGekozenTabellen_DragEnter(object sender, DragEventArgs e) 
    { 
     if (!e.Data.GetDataPresent("myFormat") ||sender == e.Source) 
     { 
      e.Effects = DragDropEffects.None; 
     } 
    } 

    private void lstGekozenTabellen_Drop(object sender, DragEventArgs e) 
    { 
     try 
     { 
      if (e.Data.GetDataPresent("myFormat")) 
      { 
       Tabel tabel = e.Data.GetData("myFormat") as Tabel; 
       System.Windows.Controls.ListBox listGekozen = sender as System.Windows.Controls.ListBox; 
       listGekozen.DisplayMemberPath = "naam"; 
       listGekozen.SelectedValuePath = "naam"; 
       listGekozen.Items.Add(tabel); 
       lTabellen.Remove(tabel); 

       lstAlleTabellen.ItemsSource = null; 
       lstAlleTabellen.Items.Clear(); 
       lstAlleTabellen.ItemsSource = lTabellen; 
      } 


     } 
     catch { } 
    } 

} 

回答

0

您可以使用样式触发此,例如(完全解决方案here):

<Style x:Key="ListItemStyle" TargetType="ListViewItem"> 
     <Style.Resources> 
      <LinearGradientBrush x:Key="MouseOverBrush" StartPoint="0.5, 0" EndPoint="0.5, 1"> 
       <GradientStop Color="#22000000" Offset="0" /> 
       <GradientStop Color="#44000000" Offset="0.4" /> 
       <GradientStop Color="#55000000" Offset="0.6" /> 
       <GradientStop Color="#33000000" Offset="0.9" /> 
       <GradientStop Color="#22000000" Offset="1" /> 
      </LinearGradientBrush> 
     </Style.Resources> 
     <Setter Property="Width" Value="Auto" /> 
     <Setter Property="Padding" Value="0,4" /> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
     <Setter Property="Border.BorderThickness" Value="0,0,0,0.5" /> 
     <Setter Property="Border.BorderBrush" Value="LightGray" /> 
     <Style.Triggers> 
      <Trigger Property="jas:ListViewItemDragState.IsBeingDragged" Value="True"> 
       <Setter Property="FontWeight" Value="DemiBold" /> 
      </Trigger> 
      <Trigger Property="jas:ListViewItemDragState.IsUnderDragCursor" Value="True"> 
       <Setter Property="Background" Value="{StaticResource MouseOverBrush}" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style>