XAML:MouseLeftButtonUp 仅在单击文本时触发,而非空白
XAML: MouseLeftButtonUp only fires when clicking text, not whitespace
我有一个列表框(在 Silverlight 中),它使用 DataTemplate 作为 ItemTemplate。 DataTemplate 定义如下:
<DataTemplate>
<StackPanel Orientation="Horizontal"
MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp"
Tag="{Binding}">
<TextBlock Name="roleItem"
Text="{Binding Path=DisplayValue, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
我发现我的事件 RoleStackPanel_MouseLeftButtonUp 只有在 TextBlock 中显示的任何文本被单击时才会触发。如果用户单击文本右侧项目中的任何空白,则不会触发该事件。所以假设控件是 300px 宽但在项目中只有单词 "Admin",您必须单击 "Admin" 而不是右边的空白区域。
我怎样才能让事件在我点击项目的任何地方触发,无论是在文本上还是在空白处?
所以有几个快速的注意事项可以让你排序。
a.) 默认情况下,面板区域没有 HitTestVisibility。这是有意设计的。要让您的事件为父级触发,只需添加 IsHitTestVisible="True"
的 属性 或通过 Background="Transparent"
为面板提供 Brush
以调用 HitTestVisibility。
b.) StackPanel
只会消耗其子项所需的 space。如果您希望像您描述的那样为用户提供大面积的点击,而不是将 StackPanel
换成 Grid
,这应该消耗其父级提供的任何 space。 HitTestVisibility 的相同规则适用。
<DataTemplate>
<Grid IsHitTestVisible="True"
MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp"
Tag="{Binding}">
<TextBlock Name="roleItem"
Text="{Binding Path=DisplayValue, Mode=TwoWay}" />
</Grid>
</DataTemplate>
希望这对您有所帮助,干杯!
我有一个列表框(在 Silverlight 中),它使用 DataTemplate 作为 ItemTemplate。 DataTemplate 定义如下:
<DataTemplate>
<StackPanel Orientation="Horizontal"
MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp"
Tag="{Binding}">
<TextBlock Name="roleItem"
Text="{Binding Path=DisplayValue, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
我发现我的事件 RoleStackPanel_MouseLeftButtonUp 只有在 TextBlock 中显示的任何文本被单击时才会触发。如果用户单击文本右侧项目中的任何空白,则不会触发该事件。所以假设控件是 300px 宽但在项目中只有单词 "Admin",您必须单击 "Admin" 而不是右边的空白区域。
我怎样才能让事件在我点击项目的任何地方触发,无论是在文本上还是在空白处?
所以有几个快速的注意事项可以让你排序。
a.) 默认情况下,面板区域没有 HitTestVisibility。这是有意设计的。要让您的事件为父级触发,只需添加 IsHitTestVisible="True"
的 属性 或通过 Background="Transparent"
为面板提供 Brush
以调用 HitTestVisibility。
b.) StackPanel
只会消耗其子项所需的 space。如果您希望像您描述的那样为用户提供大面积的点击,而不是将 StackPanel
换成 Grid
,这应该消耗其父级提供的任何 space。 HitTestVisibility 的相同规则适用。
<DataTemplate>
<Grid IsHitTestVisible="True"
MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp"
Tag="{Binding}">
<TextBlock Name="roleItem"
Text="{Binding Path=DisplayValue, Mode=TwoWay}" />
</Grid>
</DataTemplate>
希望这对您有所帮助,干杯!