我把ListBoxItems放在画布上了。我可以使用ScrollViewer在画布上拖动和滚动视图,并使用一些鼠标事件。这些鼠标事件似乎覆盖了嵌套在SelectionChanged中的ListBox的ListBox事件,或者选择永远不会进行,因为鼠标事件在ListBox之前捕获了单击。如果有人对这个问题有任何解决办法,我们将不胜感激。谢谢你的时间,这是我的密码。
XAML:
<ScrollViewer x:Name="objScrollViewer"
Grid.Row="0"
Grid.Column="1"
VerticalScrollBarVisibility="Hidden"
HorizontalScrollBarVisibility="Hidden"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
MouseLeftButtonUp ="OnMouseLeftButtonUp"
PreviewMouseLeftButtonUp ="OnMouseLeftButtonUp"
PreviewMouseLeftButtonDown="OnPreviewMouseLeftButtonDown"
PreviewMouseMove="OnPreviewMouseMove"
PreviewMouseUp="OnPreviewMouseUp"
ScrollChanged="OnScrollViewerScrollChanged">
<ListBox x:Name="objCoreViewer"
ItemsSource="{Binding ItemsSource}"
Background="Transparent"
SelectionChanged="objCoreViewer_SelectionChanged"
ItemTemplateSelector="{DynamicResource CoreViewerDataTemplateSelector}"
ItemContainerStyleSelector="{DynamicResource ItemContainerStyleSelector}"
PreviewMouseWheel="objCoreViewer_PreviewMouseWheel">
<!-- Core Map Canvas -->
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<local:CoreViewerCanvas x:Name="objCoreViewerCanvas"
Background="Transparent"
ClipToBounds="True">
<local:CoreViewerCanvas.LayoutTransform>
<ScaleTransform ScaleX="{Binding Path=Value, ElementName=ZoomSlider}"
ScaleY="{Binding Path=Value, ElementName=ZoomSlider}" />
</local:CoreViewerCanvas.LayoutTransform>
</local:CoreViewerCanvas>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</ScrollViewer>C#:
这从来没有被称为
private void objCoreViewer_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
},这确实被称为
private void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var mousePos = e.GetPosition(objScrollViewer);
if (mousePos.X <= objScrollViewer.ViewportWidth && mousePos.Y <
objScrollViewer.ViewportHeight)
{
objScrollViewer.Cursor = Cursors.SizeAll;
lastDragPoint = mousePos;
Mouse.Capture(objScrollViewer);
}
}编辑1:
我将ScrollViewer事件属性从PreviewMouseLeftButtonDown更改为MouseLeftButtonDown,它现在触发SelectionChanged事件方法,但ScrollViewer现在没有滚动,因为MouseLeftButtonDown事件方法从未被捕获。叹气!
发布于 2011-06-17 11:16:13
将鼠标事件方法更改为:
private void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var mousePos = e.GetPosition(objScrollViewer);
if (mousePos.X <= objScrollViewer.ViewportWidth && mousePos.Y <
objScrollViewer.ViewportHeight)
{
objScrollViewer.Cursor = Cursors.SizeAll;
lastDragPoint = mousePos;
Mouse.Capture(objScrollViewer);
}
FrameworkElement ctrl = (e.OriginalSource as FrameworkElement);
if (ctrl != null)
{
switch (ctrl.DataContext.GetType().ToString())
{
case "GE.GNF.ACUMEN.Library.SIMULATOR_BUNDLE_NODAL_DATA":
objCoreViewer.SelectedItem = ctrl.DataContext as SIMULATOR_BUNDLE_NODAL_DATA;
break;
case "GE.GNF.ACUMEN.Library.SIMULATOR_CONTROL_BLADE_NODAL_DATA":
objCoreViewer.SelectedItem = ctrl.DataContext as SIMULATOR_CONTROL_BLADE_NODAL_DATA;
break;
default:
break;
}
}
}https://stackoverflow.com/questions/6374097
复制相似问题