我正在使用DataTrigger
取消選擇ComboBox
與CheckBox
(未選中==取消選中)。 我需要的是什麼:WPF取消選擇帶複選框的複選框 - 複選框組合框
-
當我選擇的ComboBox一些項目
- 然後複選框需要變得 經過。
- 當我取消選擇複選框,然後ComboBox需要取消選擇。如果組合框被取消
- 複選框不能被選中(或如果組合框複選框後取消已選中的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 BU一切都和以前一樣:
<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" />
線。如果我刪除它,那麼當datatrigger關閉時取消選擇ComboBox,但如果我保留它,那麼當datatrigger關閉時,將combobox設置爲第二項。所以我需要一些線我可以告訴:什麼都不做,不取消選擇組合框,保持當前狀態。
有你避免代碼特別的原因?解決方案將無限簡單(更不用說單元測試)在ViewModel中。 – benPearce
我想幹淨的XAML,因爲我想爲將來製作通用的「複製粘貼」解決方案。所以你認爲這是可能的。我有問題,例如:如果我設置複選框未選中狀態以取消選擇組合框一切工作正常,但每次當我檢查複選框時取消選擇組合框。不知怎的,當datatrigger的條件爲true時,datatrigger可以正常工作,但是當false組合框總是被設置爲取消選中狀態時(假設它是組合框的默認初始狀態)。如果條件爲false,我需要在樣式觸發器中說些什麼不要做任何事情保持當前狀態。 –
是否有特殊原因,您將組合框放在複選框內?一個'ControlTemplate'在這裏會更有意義 – lokusking