设计具有禁用的组合框项目的组合框

时间:2013-12-04 21:32:19

标签: c# .net wpf combobox custom-controls

我想设计一个组合框,它能够禁用其中的组合框项(绑定到可观察的集合)。 我知道这不是最佳的UI策略,但我的模块需要它。

2 个答案:

答案 0 :(得分:1)

我认为你的模型看起来像这样:

public class Model
{
    public string Text { get; set; }
    public bool Enabled { get; set; }
}

为了演示的目的,我将手动进行绑定:

theComboBox.ItemsSource = new ObservableCollection<Model>{
            new Model{Text="One", Enabled=true},
            new Model{Text="Two", Enabled=false},
            new Model{Text="Three", Enabled=true}
        };

您需要做的就是修改ComboBoxItem样式并将IsEnabled属性绑定到模型中的Enable字段:

<ComboBox Name="theComboBox" DisplayMemberPath="Text" Margin="26,28,302,270">
        <ComboBox.Resources>
            <Style TargetType="{x:Type ComboBoxItem}">
                <Setter Property="IsEnabled" Value="{Binding Enabled}"/>
            </Style>
        </ComboBox.Resources>
    </ComboBox>

显然,如果您的模型中没有“已启用”字段,则您需要使用转换器或其他内容。

答案 1 :(得分:0)

您可以看到此link

或只是尝试此代码

<ComboBox ItemTemplate="{StaticResource IpInfoTemplate}" 
          ItemsSource="{Binding Source={x:Static WpfApplication1:App.IpInfoList}, Mode=OneWay}">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Setter Property="IsEnabled" Value="{Binding Enabled}"/>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

<ComboBox ItemTemplate="{StaticResource IpInfoTemplate}" ItemsSource="{Binding Source={x:Static WpfApplication1:App.IpInfoList}, Mode=OneWay}"> <ComboBox.ItemContainerStyle> <Style TargetType="{x:Type ComboBoxItem}"> <Setter Property="IsEnabled" Value="{Binding Enabled}"/> </Style> </ComboBox.ItemContainerStyle> </ComboBox>