问题描述
|
我在程序中使用拖放操作,效果很好。但是我正在使用列表框中的单词列表,当我选择一个单词并将其拖到另一个列表框中时,用户不再知道他选择了哪个单词,因为其中的“视觉”选择第一个列表框没有出现。有谁知道我如何在列表框中看到所选项目?在实施拖放操作之前,选择的单词在选择单词时会具有另一种颜色,但是在添加拖放操作后,我不再看到它了。谁能帮我?
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 { }
}
}
解决方法
您可以为此使用样式触发器,例如(此处为完整解决方案):
<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.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>