在包含 ListViewItem 的标签之间单击时,DoubleClick 未在 ListViewItem 上处理
DoubleClick not handled on ListViewItem when clicking between Labels which comprises the ListViewItem
我用一些 ListViewItems 实现了一个 ListView。 ListViewItem 由网格中的两个标签组成。为了不让下划线吃掉一个字母,我实施了一个修复,将 RecognizesAccessKey 设置为 false。
<Grid.Resources>
<Style x:Key="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}" TargetType="{x:Type Label}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Label}">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
Margin="5"
RecognizesAccessKey="False" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
我想处理对 ListViewItem 的双击。将它添加到 ListView 的 InputBindings 不起作用。 another question here on Whosebug 正在讨论这个问题。
其他问题的答案建议将其移至 ListViewItem 本身的 InputBindings。这通常有效,但在标签之间单击时,双击没有被处理。
这是由上面显示的代码引起的。删除边距并将两个标签彼此相邻将是 'solution' 但我想让它们彼此靠近。当然,完全删除上面的代码也可以解决这个问题。
但是有了这个余量,两个不处理 DoubleClick 的标签之间有一些 space。如果直接在标签上设置边距,这不会改变。
on yet another question 建议的完全不同的解决方案是实现 ListView 的附加行为。是的,无论我点击哪里,DoubleClick 都会被处理。但是,即使不是单击某个项目而是单击 ListView 中的某处时,它也会被处理。 ListView 通常在最后一项下面有一些空的 space,当点击那里时,DoubleClick 仍然被处理。我只想在项目悬停时处理它。
对于 DoubleClick 的实现位置(即 ListView 和 ListViewItem 都可以),我没有任何强烈的偏好,但我不确定如何使两者都正常工作。两种实现都有一个缺点,我还没有想出如何解决它。
有没有人知道如何使上述两种方法中的一种起作用。
原来Border的BackgroundColor默认为Null。设置为透明时,双击处理。
<Border Background="Transparent">
链接:
Mouse event on transparent background
{x:Null} vs. Transparent?
Hit Testing in the Visual Layer
我用一些 ListViewItems 实现了一个 ListView。 ListViewItem 由网格中的两个标签组成。为了不让下划线吃掉一个字母,我实施了一个修复,将 RecognizesAccessKey 设置为 false。
<Grid.Resources>
<Style x:Key="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}" TargetType="{x:Type Label}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Label}">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
Margin="5"
RecognizesAccessKey="False" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
我想处理对 ListViewItem 的双击。将它添加到 ListView 的 InputBindings 不起作用。 another question here on Whosebug 正在讨论这个问题。
其他问题的答案建议将其移至 ListViewItem 本身的 InputBindings。这通常有效,但在标签之间单击时,双击没有被处理。
这是由上面显示的代码引起的。删除边距并将两个标签彼此相邻将是 'solution' 但我想让它们彼此靠近。当然,完全删除上面的代码也可以解决这个问题。
但是有了这个余量,两个不处理 DoubleClick 的标签之间有一些 space。如果直接在标签上设置边距,这不会改变。
on yet another question 建议的完全不同的解决方案是实现 ListView 的附加行为。是的,无论我点击哪里,DoubleClick 都会被处理。但是,即使不是单击某个项目而是单击 ListView 中的某处时,它也会被处理。 ListView 通常在最后一项下面有一些空的 space,当点击那里时,DoubleClick 仍然被处理。我只想在项目悬停时处理它。
对于 DoubleClick 的实现位置(即 ListView 和 ListViewItem 都可以),我没有任何强烈的偏好,但我不确定如何使两者都正常工作。两种实现都有一个缺点,我还没有想出如何解决它。
有没有人知道如何使上述两种方法中的一种起作用。
原来Border的BackgroundColor默认为Null。设置为透明时,双击处理。
<Border Background="Transparent">
链接:
Mouse event on transparent background
{x:Null} vs. Transparent?
Hit Testing in the Visual Layer