开发者

Only the text in a ListBox item is selectable, the space outside of the text is not selectable

开发者 https://www.devze.com 2023-04-06 18:32 出处:网络
I have a WPF ListBox whose items are TextBlocks. When I click on the text the SelectionChanged handler is called as expected. However, if I click inside the item, but not directly over the text the ha

I have a WPF ListBox whose items are TextBlocks. When I click on the text the SelectionChanged handler is called as expected. However, if I click inside the item, but not directly over the text the handler is not called. This is more apparent when the text items are of widely varying lengths. If I have two items:

foo

exclamation

The "foo" item has a lot of space to the right which doesn't respond to the click

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

...

<ListBox SelectionChanged="ListItemSelect开发者_高级运维ed" ItemTemplate="{StaticResource NameTemplate}"/>


I found that the following works, but it seems rather verbose...

<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>

Any ideas on how to do this more concisely? Or a way to put this in the ItemTemplate? I couldn't find a way to do the same in the template.

The orig without that was just:

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


Try. You can take away the background color but that will show you how big the TextBlock is.

     Background="Beige" HorizontalAlignment="Stretch"


Are you sure the extra white space you are clickin on is "inside" your ListBox. Are you sure your ListBox is spanned across that much width?

Coz it doesnt seem to happen in my case.... (following ListBox is a child of 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>

My ListBox_SelectionChanged is correctly called even if I click the white space outside the item level TextBlock boundaries (provided that I am actually clicking somewhere inside the ListBox).

0

精彩评论

暂无评论...
验证码 换一张
取 消