我使用 Visual Studio 2022 创建 WPF 应用程序。我在 Windows 框架中有两个复选框,
grade_4_CB
和 grade_4_centered_CB
,如下所示:
<Window>
<Grid>
<Viewbox Stretch=" fill">
<Canvas Width=" 1100" Height=" 620">
<CheckBox x:Name="grade_4_CB" Content="Grade 4" />
<CheckBox x:Name="grade_4_centered_CB" Content="Grade 4 Centered"/>
</Canvas>
</Viewbox>
</Grid>
</Window>
现在,当我单击
grade_4_CB
(IsChecked="True")时,grade_4_centered_CB
的 IsEnabled="True"
。
虽然未单击
grade_4_CB
(IsChecked="False"),但 grade_4_centered_CB
的 IsEnabled="False"
我尝试在
grade_4_centered_CB
后面添加,例如,
<CheckBox x:Name="grade_4_centered_CB" Content="Grade 4 Centered">
<CheckBox.Style>
<Style TargetType="CheckBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=grade_4_CB, Path=IsChecked}" Value="True">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=grade_4_CB, Path=IsChecked}" Value="False">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
但是,我收到错误,
错误XLS0415:在“CheckBox”类型上找不到可附加属性“Style”
另一种方法是将
<CheckBox.Style>
替换为 <CheckBox.Resources>
但我遇到了类似的错误。
另外,我也尝试过直接修改右栏(common-IsEnable-data bindingdialog)中
grade_4_centered_CB
的属性,找到并添加grade_4_CB
-path(IsChecked),但是无论False string还是True string,都有没有变化grade_4_centered_CB
很可能您在其他方面有错误。您的样式选项是正确的并且应该可以正常工作。
我是这样检查的:
<Window ---------------
--------------->
<Grid>
<StackPanel Width=" 1100" Height=" 620">
<CheckBox x:Name="grade_4_CB" Content="Grade 4" />
<CheckBox x:Name="grade_4_centered_CB" Content="Grade 4 Centered">
<CheckBox.Style>
<Style TargetType="CheckBox">
<Style.Triggers>
<!--This trigger for True is superfluous. It can be removed.-->
<DataTrigger Binding="{Binding ElementName=grade_4_CB, Path=IsChecked}" Value="True">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=grade_4_CB, Path=IsChecked}" Value="False">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
</StackPanel>
</Grid>
</Window>
无需样式触发器即可实现相同的行为。仅使用绑定。
<Grid>
<StackPanel Width=" 1100" Height=" 620">
<CheckBox x:Name="grade_4_CB" Content="Grade 4" />
<CheckBox x:Name="grade_4_centered_CB" Content="Grade 4 Centered"
IsEnabled="{Binding IsChecked, ElementName=grade_4_CB}"/>
</StackPanel>
</Grid>