У меня есть ListBoxItems на холсте. У меня есть возможность перетаскивать и прокручивать вид на холсте с помощью некоторых событий мыши, используя ScrollViewer. Эти события мыши, кажется, переопределяют событие SelectionChanged для ListBox, который вложен в ScrollViewer, или Selection никогда не выполняется, потому что события мыши фиксируют щелчок, прежде чем 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 никогда не перехватывается. SIGH!