1

項目が TextBlocks である WPF ListBox があります。テキストをクリックすると、SelectionChanged ハンドラーが期待どおりに呼び出されます。ただし、アイテム内をクリックしても、テキストを直接クリックしないと、ハンドラーは呼び出されません。これは、テキスト項目の長さが大きく異なる場合に顕著になります。2 つのアイテムがある場合:

フー
感嘆符

「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

あなたがクリックしている余分な空白があなたの「内側」にあると確信していますか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項目レベルの境界の外側の空白をクリックしても、Myは正しく呼び出されますTextBlock(実際にのどこかをクリックしている場合ListBox)。

于 2011-09-22T06:30:38.157 に答える
0

試す。背景色を取り除くことはできますが、TextBlock の大きさがわかります。

     Background="Beige" HorizontalAlignment="Stretch"
于 2011-09-21T22:39:10.187 に答える