2

いくつかのアイテムのリストボックスがあり、それらをクリックできるようにする必要があります。問題は、SelectionChangedアイテムのテキストをクリックしても、空白の部分をクリックした場合にのみ、イベントが発生しないことです。私はWPFを初めて使用しますが、なぜこれが発生しているのかわかりません。

XAML:

<ListBox Name="lBoxVouchers" BorderThickness="0" FontSize="15" SelectionChanged="lBoxVouchers_SelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBoxItem Content="{Binding Name}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

ハンドラ:

private void lBoxVouchers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.AddedItems.Count > 0)
        MessageBox.Show("You just selected " + e.AddedItems[0]);
}

lBoxVouchers.ItemsSourceプロパティを介してコード内のオブジェクトのリストをバインドしていますが、それらが表示されます。もちろん、各オブジェクトにはNameプロパティがあります。

コードとXAMLの両方で、リストボックスとアイテムにIsEnabledを設定しようとしましたが、役に立ちません。

WPFでこれを行うためのより良い方法についてのコメントも歓迎します。

4

3 に答える 3

2

Name プロパティのみを表示したい場合は、次のようにリストボックスを定義できます。

<ListBox Name="lBoxVouchers" BorderThickness="0" FontSize="15" SelectionChanged="lBoxVouchers_SelectionChanged" DisplayMemberPath="Name" />

コード ビハインドで ObservableCollection に項目を配置する場合は、データ バインディングを XAML に渡すこともできます。

<ListBox Name="lBoxVouchers" BorderThickness="0" FontSize="15" SelectionChanged="lBoxVouchers_SelectionChanged" DisplayMemberPath="Name" ItemsSource={Binding Path=Items}" />

コードビハインドには、次のようなものが必要です。

ObservableCollection<object> Items {get; set}

ハンドラーについては、次のようなこともします。

private void lBoxVouchers_SelectionChanged(object sender, SelectionChangedEventArgs e) {
    if (((ListBox)sender).SelectedItem != null)
        MessageBox.Show("You just selected " + (ListBox)sender).SelectedItem);
}
于 2010-11-15T12:52:01.620 に答える
0

リストボックス項目のコンテンツが引き伸ばされていない可能性があります。リストボックス項目にこのスタイルを書いて試してみてください。

<Style TargetType="{x:Type ListBoxItem}">
  <Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
于 2010-11-15T13:05:52.727 に答える
0

リストボックスに設定IsSynchronizedWithCurrentItem="true"します。

ここでは、このプロパティの詳細を取得するための出発点を見つけることができます。

このプロパティを true に設定すると、実際に選択されたアイテムを保持する現在のアイテムと選択が同期されます。空白をクリックすると、おそらく現在のアイテムが null に変わり、イベント ハンドラーが呼び出されます。

于 2010-11-15T12:35:31.210 に答える