我正在使用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