如何在XAML中管理CheckBox?

3

我是一名编程新手,我想通过包含“if-else条件”来管理我的复选框。例如,我的网格中有两列名为“可读”和“可写”(公共布尔值)。我将使用CheckBox来表示这两列。

1) 如果可读/可写的值为false,则该复选框将是“只读”的。

2) 如果可读/可写的值为true,则用户可以编辑该复选框。

例如,我要如何从下面的代码中进行编辑?(假设已完成数据绑定)

<sf:GridTreeColumn MappingName="Readable" PercentWidth="2">
    <sf:GridTreeColumn.StyleInfo>
        <sf:GridStyleInfo CellType="CheckBox" HorizontalAlignment="Center" IsThreeState="False"/>
    </sf:GridTreeColumn.StyleInfo>
</sf:GridTreeColumn>
<sf:GridTreeColumn MappingName="Writable" PercentWidth="2">
    <sf:GridTreeColumn.StyleInfo>
        <sf:GridStyleInfo CellType="CheckBox" HorizontalAlignment="Center" IsThreeState="False"/>
    </sf:GridTreeColumn.StyleInfo>
</sf:GridTreeColumn>

诚挚感谢所有尝试阅读我的问题并帮助我的人。=)

嗨,你正在使用第三方控件吗?我猜你正在使用Syncfusion控件。 - Ravi Shankar B
不,我没有使用第三方控件。实际上,我现在在考虑如果我使用DataBoundTemplate作为我的CellType,是否可以解决问题。然后我将数据绑定到我的CheckBox的"IsEnabled"和"IsChecked"属性。 - user3481276
你应该将GridStyleInfo的ReadOnly属性绑定到数据的可写属性上。 - Michal Ciechan
对不起,各位,我目前还是一名学生,对编程还很新手。=( - user3481276
当我尝试将可写属性绑定到只读属性时出现了错误。它指出只读属性不是依赖属性,因此无法绑定。 - user3481276
显示剩余4条评论
3个回答

2
如果您正在使用Syncfusion控件,可以从syncfusion.GridCommon.wpf获取一个属性来设置列内的复选框。
<sf:GridTreeColumn MappingName="Readable" PercentWidth="2">
<sf:GridTreeColumn.StyleInfo>
    <sf:GridStyleInfo CellType="CheckBox" gridCommon:VisualContainer.WantsMouseInput=true HorizontalAlignment="Center" IsThreeState="False"/>
</sf:GridTreeColumn.StyleInfo>

试试这个!


你是否在使用Syncfusion(第三方)控件来实现GridTree? - Ravi Shankar B
我明白了,Syncfusion 是指第三方。是的,我已经将 Syncfusion 添加到我的引用中,并在我的 XAML 代码中使用它。抱歉,我目前还是一名学生,对此还很陌生。=( - user3481276
在Syncfusion的公共dll中,他们提供了您所需的API,这就是我在此答案中解释的内容。 - Ravi Shankar B
请检查一下您的项目是否已经附加了 Syncfusion.GridCommon.Wpf dll。 - Ravi Shankar B
如果您认为这是答案,请标记它为答案。 - Ravi Shankar B
显示剩余6条评论

1
这可以通过使用转换器轻松实现: 将此类添加到您的项目中,并在XAML代码中包含它。
 public sealed class BoolToVisibilityConverter : IValueConverter
{
    #region Methods

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

        bool boolValue = false;

        if (!bool.TryParse(System.Convert.ToString(value), out boolValue))
        {
            boolValue = false;
        }

        if (boolValue)
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    #endregion


    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML 代码:

<UserControl.Resources>
    <converter:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
</UserControl.Resources>

<sf:GridTreeColumn MappingName="Readable" PercentWidth="2">
<sf:GridTreeColumn.StyleInfo>
    <sf:GridStyleInfo CellType="CheckBox" HorizontalAlignment="Center"   
 IsThreeState="False" IsEnabled="{Binding Readable, Converter={StaticResource  
 BoolToVisibilityConverter}}"/>
 </sf:GridTreeColumn.StyleInfo>
 </sf:GridTreeColumn>
 <sf:GridTreeColumn MappingName="Writable" PercentWidth="2">
 <sf:GridTreeColumn.StyleInfo>
 <sf:GridStyleInfo CellType="CheckBox" HorizontalAlignment="Center" 

 IsThreeState="False" IsEnabled="{Binding Writable, Converter={StaticResource   
 BoolToVisibilityConverter}}"/>
 </sf:GridTreeColumn.StyleInfo>
 </sf:GridTreeColumn>

希望这有所帮助。

嘿,Praveena,你的转换器想法听起来很酷。我目前正在尝试这个。但是,“IsEnabled未被识别或无法访问”。也许有什么遗漏吗? - user3481276
它指出:“在类型'GridStyleInfo'中未找到属性'IsEnabled'”。 - user3481276
嗨,我不熟悉Syncfusion控件,只需找出您的控件的IsEnabled等效项并使用它即可。如果可以,请告诉我它是否适用于您。 - Praveena

1
虽然这并没有直接回答你的问题,但在按钮点击时启用或禁用复选框可能会使你达到所需的结果,即使复选框变为只读或可读/写。
(注意:这个简单而有效的概念可以在加载事件或用户身份验证中进行修改和使用,在应用程序上禁用或启用特定内容的功能,这对你将来可能会有用。)
        private void btnEnable_Click(object sender, RoutedEventArgs e)
        {
            checkBox.IsEnabled = true;
        }

        private void btnDisable_Click(object sender, RoutedEventArgs e)
        {
            checkBox.IsEnabled = false;
        }

谢谢您的概念!=) - user3481276

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接