1
我在畫布上有ListBoxItems。我有能力使用ScrollViewer在一些鼠標事件上拖動和滾動畫布上的視圖。這些鼠標事件似乎覆蓋了嵌套在ScrollViewer中的ListBox的SelectionChanged事件,或者因爲鼠標事件捕獲了ListBox之前的點擊,所以決不會做出選擇。如果任何人有任何解決這個問題,將不勝感激。感謝您的時間,這裏是我的代碼。PreviewMouseLeftButtonDown阻止SelectionChanged事件
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事件方法永遠不會被捕獲。嘆!
不好判斷你的代碼,但好像'如果(ctrl.DataContext是SIMULATOR_BUNDLE_NODAL_DATA || ctrl.DataContext是SIMULATOR_CONTROL_BLADE_NODAL_DATA)objCoreViewer.SelectedItem = ctrl.DataContext; '會是寫這個更好的方法。 – CodeNaked 2012-01-19 23:13:00