如何通过绑定函数使用一个复选框(IsChecked)来控制另一个复选框(IsEnabled)?

问题描述 投票:0回答:1

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

c# wpf xaml checkbox
1个回答
0
投票

很可能您在其他方面有错误。您的样式选项是正确的并且应该可以正常工作。
我是这样检查的:

<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>
© www.soinside.com 2019 - 2024. All rights reserved.