我有一个WPF ListBox
,它使用DataTemplate
作为ItemTemplate
。此DataTemplate
由Border
和几个子元素组成。
我希望有一个通用命令('SelectImageCommand')处理Border
区域中的任何位置(任何子元素或空白边框本身)时单击鼠标左键。
我在InputBinding
中放置了一个Border
。该命令将按喜好执行,但不再发生“可视选择”(永久更改背景颜色)。如果我删除MouseBinding
,则视觉选择效果很好。
通过为MouseLeftButtonDown
事件添加事件处理程序,我能够实现非MVVM解决方法。
在我看来,MouseBinding
以与处理事件处理程序并将Handled
的MouseButtonEventArgs
属性设置为true相同的方式“处理”鼠标单击事件。
我该如何处理未捕获click事件的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>
最佳答案
设置Background
的Border
属性:
<Border Padding="10" Width="325" Height="350" BorderThickness="0" Margin="5"
Background="Transparent">
...
如果不这样做,未绘制(paint)的区域将不会响应鼠标事件。
关于c# - 如何在 'InputBindings'元素中正确执行 'Border'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632693/