【WPF】ComboBoxItem的禁用

简介: 原文:【WPF】ComboBoxItem的禁用 需求:下拉列表ComboBox中,要求部分Item不可用。效果是鼠标一上去后不获得焦点,且无法点击。
原文: 【WPF】ComboBoxItem的禁用

需求:下拉列表ComboBox中,要求部分Item不可用。效果是鼠标一上去后不获得焦点,且无法点击。

前台XAML界面:

<!-- 下拉列表:省份 -->
<ComboBox Grid.Column="0" Grid.Row="0" x:Name="provinceComboxBox" Margin="20,10,0,200" Height="20"
          ItemsSource="{Binding ProvinceList}" FontSize="12" Style="{StaticResource myComboBox_Useable}">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter  Property="IsEnabled" Value="{Binding isEnabled}" />
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

样式文件如下:使得可用于不可用的Item文字颜色不同,显示的文字是实体类中的”provinceName”属性。

<!-- 样式:x:Key="myComboBox_Useable" 下拉列表中,可能包含不可选的Item! -->
<Style x:Key="myComboBox_Useable" TargetType="{x:Type ComboBox}">
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>

    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Text="{Binding Path=provinceName}">
                    <TextBlock.Style>
                        <Style TargetType="TextBlock">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding isEnabled}" Value="True">
                                    <DataTrigger.Setters>
                                        <Setter Property="Foreground" Value="blue"/>
                                        <!--<Setter Property="IsEnabled" Value="{Binding isEnabled}" />--><!-- 经测试,在样式中写无效,改到在前台写 -->
                                    </DataTrigger.Setters>
                                </DataTrigger>
                                <DataTrigger Binding="{Binding isEnabled}" Value="False">
                                    <DataTrigger.Setters>
                                        <Setter Property="Foreground" Value="Pink"/>
                                        <!--<Setter Property="IsEnabled" Value="{Binding isEnabled}" />--><!-- 经测试,在样式中写无效,改到在前台写 -->
                                    </DataTrigger.Setters>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
            </DataTemplate>
        </Setter.Value>
    </Setter>

</Style>

ViewModel中声明前台控件ItemsSource绑定到的列表

private ObservableCollection<Provinces> provinceList;   // 所有省份的信息
public ObservableCollection<Provinces> ProvinceList
{
    get { return provinceList; }
    set { SetProperty(ref provinceList, value); }
}

注意,前台ComboBoxItem的”IsEnabled”属性绑定到的是Provinces实体类中的”IsEnabled”属性。

public class Provinces
{
    public int provinceId { get; set; }         // 省会ID
    public string provinceName { get; set; }    // 省会名称
    public bool isEnabled { get; set; }         // 该省份是否可用
}

控制层给ProvinceList列表填充数据即可。

houseTypeViewModel.ProvinceList.Clear();
houseTypeViewModel.ProvinceList = DataList; // 这是联网获取的数据!

foreach (var item in houseTypeViewModel.ProvinceList)
{
    // 模拟的数据
    if (item.provinceName.Equals("广西壮族自治区") || item.provinceName.Equals("广东省"))
    {
        item.isEnabled = true;
    }

    houseTypeViewModel.ProvinceName.Add(item.provinceName);
}

最终效果如下图:

这里写图片描述

目录
相关文章
|
4月前
|
C#
WPF/C#:程序关闭的三种模式
WPF/C#:程序关闭的三种模式
96 0
|
API C# UED
wpf的PixelLab.Wpf切换效果
wpf的PixelLab.Wpf切换效果
100 0
|
C#
winform,wpf全屏 还显示任务栏的解决方法
原文:winform,wpf全屏 还显示任务栏的解决方法 以wpf为例: 全屏代码: this.Topmost = true; this.WindowStyle = System.Windows.WindowStyle.
1908 0
|
C#
WPF 创建自定义窗体
原文:WPF 创建自定义窗体 在前面的一篇博客"WPF 自定义Metro Style窗体",展示了如何创建一个类似于Metro Style的Window,并在程序中使用。但是这个窗体不能够自由的改变大小。
1402 0
|
C# 前端开发
使用Adorner显示WPF控件的边界点
原文:使用Adorner显示WPF控件的边界点 当我们拖动WPF控件时,我们为了更清楚地需要显示控件,一般我们会在WPF控件所围成的矩形区域的四个边界点上作一个特殊的记号(比如圆点)。
1281 0
|
C#
WPF 自定义IconButton
原文:WPF 自定义IconButton 自定义一个按钮控件 按钮控件很简单,我们在项目中有时把样式封装起来,添加依赖属性,也是为了统一。 这里举例,单纯的图标控件怎么设置 1、UserControl界面样式 ...
1437 0
|
C# 前端开发
WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制
原文:WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
968 0
|
C#
WPF 自定义ColorDialog DropDownCustomColorPicker
原文:WPF 自定义ColorDialog DropDownCustomColorPicker 今天分享一个 WPF 版的ColorDialog,该控件源自 这里,不过笔者已经该控件做了大量的修改工作,以适应自己的产品需求,闲话少说,先看看效果图:   1、DropDownCustomColorPicker  效果图 先看原项目的(喜欢这种方式的,请到 这里 下载源码 ) 被笔者修改之后的效果图: 二、DropDownCustomColorPicker  四种颜色选择方式 第一种:单击任意一个预定义的颜色即可。
1378 0
|
C# 容器
WPF命令
原文:WPF命令 “有了路由事件为什么还需要命令系统呢?”。事件的作用是发布、传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件送来的消息事件并不做任何限制,每个接收者可已用自己的行为来响应事件。
829 0