1

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


感叹号

“foo”项目右侧有很多空间,对点击没有反应

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

...

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

3 回答 3

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}"/>
于 2011-09-22T17:02:56.517 回答
0

尝试。你可以去掉背景颜色,但这会告诉你 TextBlock 有多大。

     Background="Beige" HorizontalAlignment="Stretch"
于 2011-09-21T22:39:10.187 回答
0

你确定你点击的额外空白是在你的ListBox. 你确定你ListBox的跨度这么大吗?

因为在我的情况下它似乎没有发生....(以下ListBox是 a 的孩子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

于 2011-09-22T06:30:38.157 回答