を使用してComboBox
をCheckBox
(未チェック==選択解除)の選択を解除します。何が必要 は次のとおりです。WPFはチェックボックス付きコンボボックスをコンボボックスから選択解除します - リセット項目付きコンボボックス
- 私はチェックボックスがオンになっ する必要があり、その後のComboBoxからいくつかの項目を選択したとき。
- チェックボックスのチェックを外すと、コンボボックスは選択を解除する必要があります。
- コンボボックスが選択解除された(またはコンボボックスの選択が解除された場合にチェックボックスがチェックされた後、コンボボックスが最初の項目で選択しなければならない)場合は、チェックボックスは
確認することはできませんここでXAMLは、(これは作業バージョンであり、変更する必要が)です。ソリューションは純粋なXAML(C#コードなし)でなければなりません!
<CheckBox HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" Margin="90,519,13,0" VerticalAlignment="Top" Height="21" Width="Auto">
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}">
<Style.Resources>
<Style TargetType="Path">
<Setter Property="FlowDirection" Value="LeftToRight" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="FlowDirection" Value="LeftToRight" />
</Style>
</Style.Resources>
<Setter Property="FlowDirection" Value="RightToLeft" />
<!--<Setter Property="IsChecked" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem, ElementName=comboBoxEventDevice, UpdateSourceTrigger=PropertyChanged}" Value="{x:Null}">
<Setter Property="IsChecked" Value="False" />
</DataTrigger>
</Style.Triggers>-->
</Style>
</CheckBox.Style>
<ComboBox x:Name="comboBoxEventDevice" FlowDirection="LeftToRight" SelectionChanged="comboBoxEventDevice_SelectionChanged" Width="Auto">
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="SelectedIndex" Value="1" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsChecked, RelativeSource={RelativeSource AncestorType={x:Type CheckBox}}}" Value="True">
<Setter Property="SelectedIndex" Value="0" />
</DataTrigger>
<!--<DataTrigger Binding="{Binding Path=IsChecked, RelativeSource={RelativeSource AncestorType={x:Type CheckBox}}}" Value="False">
<Setter Property="SelectedIndex" Value="1" />
</DataTrigger>-->
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
</CheckBox>
UPDATE:
私は、ネストされたコントロール(チェックボックス内のコンボボックス)を使用しないようにしてみてくださいので、私はすべて府XAMLを変更する前と同じである:
<CheckBox x:Name="checkBoxEventDevice" Margin="70,600,13,0" VerticalAlignment="Top" Height="21"/>
<ComboBox x:Name="comboBoxEventDevice" Margin="90,519,10,0" VerticalAlignment="Top" SelectionChanged="comboBoxEventDevice_SelectionChanged">
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="SelectedIndex" Value="1" />
<Style.Triggers>
<!--<DataTrigger Binding="{Binding Path=IsChecked, ElementName=checkBoxEventDevice}" Value="True">
<Setter Property="SelectedIndex" Value="0" />
</DataTrigger>-->
<DataTrigger Binding="{Binding Path=IsChecked, ElementName=checkBoxEventDevice}" Value="false">
<Setter Property="SelectedIndex" Value="-1" />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
問題は<Setter Property="SelectedIndex" Value="1" />
ラインです。私はそれを削除すると、ComboBoxは、datatriggerがオフのときに選択解除されますが、それを保持すると、datatriggerがオフのときにコンボボックスが2番目の項目に設定されます。だから私は私が言うことができるいくつかの行が必要です:何もしない、コンボボックスの選択を解除しないで、現在の状態を維持する。
あなたがコードを避けている特定の理由はありますか?ソリューションは、ViewModelで無限にシンプルになります(ユニットテスト可能はもちろん)。 – benPearce
将来的に普遍的な "コピー&ペースト"ソリューションを作成したいので、私はクリーンなXAMLが必要です。だからあなたはこれが可能だと思いますか?私は問題を抱えています:私はチェックボックスをチェックしない状態をコンボボックスを選択解除するとすべてうまく動作しますが、毎回チェックボックスをチェックするとコンボボックスが選択解除されます。何らかの形でdatatriggerの条件がtrueの場合、datatriggerはうまく動作しますが、falseの場合、コンボボックスは常に非選択状態に設定されます(コンボボックスのデフォルトの初期状態であるとします)。条件が偽であれば、スタイルトリガーで何か言いたいことがありますが、現在の状態をそのまま維持しないでください。 –
特別な理由はありますか?コンボボックスをチェックボックスの中に入れましたか? 'ControlTemplate'はここでもっと意味をなさないでしょう – lokusking