我有一个WPF ListBox,其项目是TextBlocks。当我单击文本时,SelectionChanged处理程序按预期调用。但是,如果我在项目内部单击,但不直接在文本上方,则不会调用处理程序。当文本项的长度变化很大时,这一点更加明显。如果我有两个项目:
FOO
感叹号
“foo”项目右侧有很多空间,不响应点击
<DataTemplate x:Key="NameTemplate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
...
<ListBox SelectionChanged="ListItemSelected" ItemTemplate="{StaticResource NameTemplate}"/>
答案 0 :(得分:1)
我发现以下作品,但似乎相当冗长......
<ListBox SelectionChanged="ListItemSelected" ItemTemplate="{StaticResource NameTemplate}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
关于如何更简洁地做到这一点的任何想法?或者把它放在ItemTemplate中?我找不到在模板中做同样事情的方法。
没有那个的原因只是:
<ListBox SelectionChanged="ListItemSelected" ItemTemplate="{StaticResource NameTemplate}"/>
答案 1 :(得分:0)
尝试。您可以删除背景颜色,但这会显示TextBlock的大小。
Background="Beige" HorizontalAlignment="Stretch"
答案 2 :(得分:0)
您确定点击的额外空白区域位于ListBox
的“内部”。您确定ListBox
跨越了这么宽的宽度吗?
因为在我的情况下似乎没有发生....(ListBox
后面是Window
的孩子)
<Window x:Class="WpfApplicationPathToImage.Window4"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window4" Height="100" Width="100">
<ListBox SelectionChanged="ListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsSource>
<x:Array Type="{x:Type TextBlock}">
<TextBlock Text="Text1"/>
<TextBlock Text="Text2"/>
<TextBlock Text="Text3"/>
<TextBlock Text="Text4"/>
<TextBlock Text="Text5"/>
<TextBlock Text="Text6"/>
</x:Array>
</ListBox.ItemsSource>
</ListBox>
</Window>
即使我点击项目级别ListBox_SelectionChanged
边界外的空白区域,我的TextBlock
也会被正确调用(前提是我实际点击内部 ListBox
})。