C# 如何将列表框中的复选框设置为禁用

C# 如何将列表框中的复选框设置为禁用,c#,wpf,xaml,checkbox,listbox,C#,Wpf,Xaml,Checkbox,Listbox,如何将列表框内的复选框设置为禁用 XAML: 问题:我正在尝试动态禁用列表框中的复选框。但当我禁用列表框时,它也会禁用垂直滚动条。所以现在我想我应该访问我的GroupBox中列表框内的复选框,然后逐个禁用它们。我该怎么做 我试过了,但没有成功: var children = LogicalTreeHelper.GetChildren(MyListBoxThing); foreach(var item in children) { var c = item as CheckBox;

如何将列表框内的复选框设置为禁用

XAML:

问题:我正在尝试动态禁用列表框中的复选框。但当我禁用列表框时,它也会禁用垂直滚动条。所以现在我想我应该访问我的GroupBox中列表框内的复选框,然后逐个禁用它们。我该怎么做

我试过了,但没有成功:

var children = LogicalTreeHelper.GetChildren(MyListBoxThing);
foreach(var item in children)
{
    var c = item as CheckBox;
    c.IsEnabled = false;
}
我想说:

loop through the listbox
   if you find a check box
       checkbox.isenabled = false
   endif
end 

提前感谢

您应该将
IsEnabled
属性添加到
MyItemsClasshing
并实现
INotifyPropertyChanged
界面:

public class MyItemsClassThing : INotifyPropertyChanged
{
    public string Name { get; set; }
    public bool IsSelected { get; set; }

    private bool _isEnabled = true;
    public bool IsEnabled
    {
        get { return _isEnabled; }
        set { _isEnabled = value; OnPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
并将
复选框的
IsEnabled
属性绑定到此属性:

<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" IsEnabled="{Binding IsEnabled}"  />

您应该将
IsEnabled
属性添加到
MyItemsClasshing
中,并实现
INotifyPropertyChanged
接口:

public class MyItemsClassThing : INotifyPropertyChanged
{
    public string Name { get; set; }
    public bool IsSelected { get; set; }

    private bool _isEnabled = true;
    public bool IsEnabled
    {
        get { return _isEnabled; }
        set { _isEnabled = value; OnPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
并将
复选框的
IsEnabled
属性绑定到此属性:

<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" IsEnabled="{Binding IsEnabled}"  />

尝试绑定IsEnabled属性。尝试绑定IsEnabled属性。那么,如何准确设置MyItemsClasshing ItemsSource集合?这应该是一个IEnumerable。如果您正确地实现了INotifyPropertyChanged,那么它应该可以工作。请发布您的完整代码。似乎我在模仿您的代码时犯了人为错误。我让它工作了。谢谢你的精彩解决方案!非常感谢我的朋友!这真的很有帮助!!几天前我无意中否决了它(因为我认为这是我自己的错误导致的),你介意编辑并在某处或某处放置一个句点,这样它会认为它已被“编辑”,并允许我对这个令人敬畏的答案投上更高的票吗?那么你如何设置MyItemsClasshing ItemsSource集合呢?这应该是一个IEnumerable。如果您正确地实现了INotifyPropertyChanged,那么它应该可以工作。请发布您的完整代码。似乎我在模仿您的代码时犯了人为错误。我让它工作了。谢谢你的精彩解决方案!非常感谢我的朋友!这真的很有帮助!!几天前我无意中否决了它(因为我认为由于我自己的错误,它不起作用)你介意编辑并在某处或某处放一个句号,让它认为它已经被“编辑”,并允许我对这个令人敬畏的答案投上更高的票吗?
foreach(var item in MyListBoxThing.Items.OfType<MyItemsClassThing>())
{
    item.IsEnabled = false;
}