4

このリンクから RadioButtonList を作成するために ListBox のスタイルを変更しました

私の要件は次のようなものです: ListBox から一度に 1 つの項目を選択する必要があります (つまり、単一選択モード)。また、コレクションにバインドするプロパティに基づいて ListBoxItem を無効/有効にする必要があります。だから私は設定しました

IsChecked="{TemplateBinding IsSelected}"

私のコレクションからIsEnabledプロパティをバインドしました。

IsEnabled="{Binding IsEnabled}" 

そして結果は以下の通り。 ここに画像の説明を入力

一部のレコードが無効な状態になっていることがわかりますが、それでも選択可能です。IsCheckedプロパティを削除すると、期待どおりに完全に機能します。しかし、IsEnabledIsSelectedの両方の機能が必要です。次に、IsEnabled プロパティの複数値コンバーターを作成し、値に基づいて、対応する値をプロパティにバインドします。現在、リストから無効なアイテムを視覚的に選択できません。しかし、無効な項目を選択すると、選択が失われます。画像を確認してください: ここに画像の説明を入力.

コード ビハインドでは、IsCheckedプロパティが最初のレコードに設定されます。この選択を制限したい。どうやってやるの?私の要件を実行するのに役立つxamlの設定はありますか? ご意見をお聞かせください...

前もって感謝します....

4

1 に答える 1

1

の代わりに のIsEnabledプロパティをバインドしているようです。これにより は無効になりますが、 は無効になりません。そのため、引き続き選択できます。RadioButtonListBoxItemRadioButtonListBoxItem

IsEnabledのプロパティをバインドできる必要がありListBoxItem、希望どおりに機能します。 

使用しているスタイルに移動して投稿したリンクに基づいて、それはスタイルのItemContainerStyleセクションにありRadioButtonListます:

<Style TargetType="{x:Type ListBoxItem}" >
    <!-- Here -->
    <Setter Property="IsEnabled" Value="{Binding IsEnabled}" />

    <Setter Property="Margin" Value="5" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Border BorderThickness="0" Background="Transparent">
                    <RadioButton Focusable="False"
                                 IsHitTestVisible="False"
                         IsChecked="{TemplateBinding IsSelected}">
                        <ContentPresenter />
                    </RadioButton>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-02-18T15:56:07.650 に答える