Click/focus ListBoxItem 的内容不会冒泡

Click/focus on a ListBoxItem's content doesn't bubble up

我有一个 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 而不是它的内容结构。 但是,单击一个项目的名称并不会 focus/select 该项目。只有单击每个项目之间的那个微小的 space(最简单的方法是项目名称和 ListBox 边框之间的 space),该项目得到 focused/selected.

当然,我四处搜索并认为我找到了罪魁祸首(事件没有冒泡)。但是在 SO 或其他地方提供的任何解决方案,e。 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.

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

如果目的是为ListBoxItem 添加工具提示,您可以使用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>

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