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>

希望这对您有所帮助,干杯!