4

私は aとListBoxa を含むかなり単純なItemTemplate定義済みの a を持っています。これは期待どおりに表示されますが、問題があります。のコンテンツ、つまりテキストまたはボタンをクリックすると、行が で選択されません。行の空白部分をクリックすると、それが行われます。行のどこかをクリックしたときに が選択されるようにしたいと思います。これを達成するために何が必要ですか?TextBlockButtonListBoxItemListBoxListBoxItem

<ListBox ItemsSource="{Binding SomeElements}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBoxItem Selected="ListBoxItem_Selected">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Title}"></TextBlock>
                    <Button>Click</Button>
                </StackPanel>                                                
            </ListBoxItem>                                            
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
4

1 に答える 1

4

@Natriumいいえ、問題はここでは異なります、

  1. DataTemplate内のListBoxItemを削除する必要があります。DataTemplateはアイテムListBoxItemを持つことができず、正しく機能しません。DataTemplateで定義したものはすべて、実行時にListBoxItem内に自動的に配置されるため、この場合、これが作成されます。
ListBoxItem
    DataTemplate
        ListBoxItem
            StackPanel...
  1. 選択イベントを追跡する場合は、ListBox.SelectionChangeイベントのみをキャッチする必要があり、ListBoxItem_Selectedを追跡する必要はありません。

コードをこれに変更します。

<ListBox ItemsSource="{Binding SomeElements}">
    <ListBox.ItemTemplate>
        <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Title}"></TextBlock>
                    <Button>Click</Button>
                </StackPanel>
         </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
于 2009-10-07T08:40:45.477 に答える