【问题标题】:Click/focus on a ListBoxItem's content doesn't bubble up单击/关注 ListBoxItem 的内容不会冒泡
【发布时间】:2016-10-18 17:57:07
【问题描述】:

我有一个ListBox,声明如下:

<ListBox ItemsSource="{Binding Contracts}" SelectedItem="{Binding SelectedContract}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <ListBoxItem Content="{Binding Name}">
        <ListBoxItem.ToolTip>
          <Grid>
            [code omitted for reasons of clarity]
          </Grid>
        </ListBoxItem.ToolTip>
      </ListBoxItem>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

我期待正常的选择行为,因为我使用项目的ToolTip 而不是它的内容结构。 但是,单击项目的名称不会聚焦/选择该项目。只有通过单击每个项目之间的微小空间(最简单的方法是项目名称和ListBox 的边框之间的空间),项目才会获得焦点/选择。

当然,我四处搜索并认为我找到了罪魁祸首(事件没有冒泡)。但是在 SO 或其他地方提供的任何解决方案,例如。 G。添加这样的代码:

<ListBoxItem.Style>
  <Style TargetType="ListBoxItem">
    <Style.Triggers>
      <Trigger Property="IsKeyboardFocusWithin" Value="True">
        <Setter Property="IsSelected" Value="True" />
      </Trigger>
    </Style.Triggers>
  </Style>
</ListBoxItem.Style>

原来没有解决问题。所以,我假设我做错了什么,我只是太盲目了,看不到它。虽然可能有使用代码隐藏的解决方案,但我更喜欢坚持使用干净纯粹的 XAML。

请帮助我,理解我的错误并解决它。

【问题讨论】:

    标签: wpf listbox selection listboxitem selectionchanged


    【解决方案1】:

    如果目的是为 ListBoxItem 添加 ToolTip,则可以使用 ItemContainerStyle。 ListBox 为每个数据绑定项创建 ListBoxItems,将 ListBoxItem 添加到 DataTemplate 不是必需的,如果它破坏了某些功能,请尽量避免它

    <ListBox>
    
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                <Setter Property="ToolTip">
                    <Setter.Value>
                        <Grid>
                            <TextBlock Text="{Binding .}"/>
                        </Grid>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.ItemContainerStyle>
    
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding .}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    
    </ListBox>
    

    编辑:我使用 Snoop 应用程序通过 DataTemplate 中的 ListBoxItem 检查您的变体。每个 ListBox 元素的可视化树中有 2 个 ListBoxItem,可能是其中一个阻止选择另一个

    【讨论】:

    • 非常感谢您将我指向 Snoop 和错误的 DataTemplate 内容!我只是忘记了 a) 这个工具(我用 WPF 开发已经有一段时间了)和 b) 在这种情况下 DataTemplate 用于定义 ListBoxItemcontent 不是“介绍”用于定义一个。因此,我很乐意接受您的回答。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多