Выбирается только текст в элементе ListBox, пространство вне текста не выбирается - PullRequest
1 голос
/ 22 сентября 2011

У меня есть WPF ListBox, элементами которого являются TextBlocks. Когда я нажимаю на текст, обработчик SelectionChanged вызывается, как и ожидалось. Однако, если я щелкаю внутри элемента, но не прямо над текстом, обработчик не вызывается. Это более очевидно, когда текстовые элементы имеют разную длину. Если у меня есть два предмета:

Foo
Восклицательный

Элемент "foo" имеет много места справа, который не реагирует на щелчок

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

...

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

Ответы [ 3 ]

1 голос
/ 22 сентября 2011

Я обнаружил, что следующее работает, но кажется довольно многословным ...

<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}"/>
0 голосов
/ 22 сентября 2011

Вы уверены, что лишний пробел, по которому вы щелкаете, находится "внутри" вашего 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).

0 голосов
/ 22 сентября 2011

Try. Вы можете убрать цвет фона, но это покажет вам, насколько велик TextBlock.

     Background="Beige" HorizontalAlignment="Stretch"
...