我有一个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。
请帮助我,理解我的错误并解决它。
答案 0 :(得分: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,可能是阻止选择另一个