只能选择ListBox项中的文本,文本外部的空间不可选

时间:2011-09-21 21:59:18

标签: wpf xaml listbox selectionchanged

我有一个WPF ListBox,其项目是TextBlocks。当我单击文本时,SelectionChanged处理程序按预期调用。但是,如果我在项目内部单击,但不直接在文本上方,则不会调用处理程序。当文本项的长度变化很大时,这一点更加明显。如果我有两个项目:

FOO
感叹号

“foo”项目右侧有很多空间,不响应点击

<DataTemplate x:Key="NameTemplate">
  <TextBlock Text="{Binding Name}"/>
</DataTemplate>

...

<ListBox SelectionChanged="ListItemSelected" ItemTemplate="{StaticResource NameTemplate}"/>

3 个答案:

答案 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 })。