【问题标题】:XAML: MouseLeftButtonUp only fires when clicking text, not whitespaceXAML:MouseLeftButtonUp 仅在单击文本时触发,而不是空白
【发布时间】:2017-10-18 17:24:48
【问题描述】:

我有一个使用 DataTemplate 作为 ItemTemplate 的列表框(在 Silverlight 中)。 DataTemplate 的定义如下:

<DataTemplate>
    <StackPanel  Orientation="Horizontal"
                 MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp"
                 Tag="{Binding}">
        <TextBlock Name="roleItem"
                   Text="{Binding Path=DisplayValue, Mode=TwoWay}"/>
    </StackPanel>
</DataTemplate> 

我发现我的事件 RoleStackPanel_MouseLeftButtonUp 只有在单击 TextBlock 中显示的任何文本时才会触发。如果用户单击文本右侧项目中的任何空白,则不会触发该事件。因此,假设控件的宽度为 300 像素,但项目中只有“Admin”一词,您必须点击“Admin”而不是右侧的空白处。

我怎样才能让它在我点击项目的任何地方、文本或空白处触发事件?

【问题讨论】:

    标签: xaml silverlight telerik


    【解决方案1】:

    所以有几个快速的考虑让你排序。

    a.) 默认情况下,您的面板区域没有 HitTestVisibility。这是设计和故意的。要让您的事件为父级触发,只需添加IsHitTestVisible="True" 的属性或通过Background="Transparent" 为面板提供Brush 以调用HitTestVisibility。

    b.) StackPanel 只会占用其子代所需的空间。如果您希望像您描述的那样为用户提供一个大的区域来点击而不是将StackPanel 交换为Grid,这应该消耗其父级可用的任何空间。应用同样的 HitTestVisibility 规则。

    <DataTemplate>
        <Grid IsHitTestVisible="True" 
              MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp" 
              Tag="{Binding}">
           <TextBlock Name="roleItem" 
                      Text="{Binding Path=DisplayValue, Mode=TwoWay}" />
        </Grid>
    </DataTemplate>
    

    希望这会有所帮助,干杯!

    【讨论】:

    • 就是这样!谢谢您的帮助。节省大量时间!
    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多