У меня есть WPF ListBox
, который использует DataTemplate
как ItemTemplate
.DataTemplate
состоит из Border
и нескольких дочерних элементов.
Мне нужна общая команда ('SelectImageCommand'), обрабатывающая щелчок левой кнопкой мыши в любом месте области Border
(любой дочерний элемент или сама пустая граница).
Я поместилInputBinding
в Border
.Команда становится выполненной как привилегированная, но «визуальный выбор» (постоянное изменение цвета фона) больше не происходит.Если я удаляю MouseBinding
, визуальный выбор работает нормально.
Мне удалось реализовать обходной путь не MVVM, добавив обработчик событий для события MouseLeftButtonDown
.
Мне кажется, что MouseBinding
"обрабатывает" событие щелчка мыши так же, как когда я реализую обработчик события и устанавливаю для свойства Handled
MouseButtonEventArgs
значение true.
Как я могу создать MVVM MouseBinding
, который не перехватывает событие нажатия?
Я не профессионал WPF.Пожалуйста, попробуйте предоставить решения, которые соответствуют MVVM.
<DataTemplate x:Key="ImageItemTemplate">
<Border Padding="10" Width="325" Height="350"
BorderBrush="{DynamicResource SignificantInformationColorBrush}"
BorderThickness="0" Margin="5" Background="Transparent" Focusable="True" MouseLeftButtonDown="ImageBorderOnMouseLeftButtonDown">
<!--<Border.InputBindings>
<MouseBinding MouseAction="LeftClick"
Command="{Binding Path=DataContext.SelectImageCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"
CommandParameter="{Binding}" />
</Border.InputBindings>-->
<StackPanel>
<Border BorderBrush="LightGray"
BorderThickness="1"
CornerRadius="1" Height="300" Width="300" Background="Transparent">
<StackPanel Background="Black">
<Canvas Width="300" Height="300" VerticalAlignment="Center"
HorizontalAlignment="Center" Background="Transparent">
<Image Width="300" Stretch="UniformToFill" StretchDirection="DownOnly"
Source="{Binding BitmapImage}"
Height="300">
<Image.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding Path=DataContext.OpenOriginalCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"
CommandParameter="{Binding}" />
</Image.InputBindings>
</Image>
</Canvas>
</StackPanel>
</Border>
<StackPanel Orientation="Horizontal" Margin="1 10 0 0">
<TextBlock Margin="5 0 0 0" TextAlignment="Center"
FontSize="11" Text="{Binding ImageInfo.SopInstanceUid}" Background="Transparent" />
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>