需求:下拉列表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);
}

最终效果如下图:

【WPF】ComboBoxItem的禁用的更多相关文章

  1. [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)

    原文 [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu) [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu) 周银辉 点击窗口左上角图标时弹出来的菜单也就是这里所说的系 ...

  2. [WPF疑难]如何禁用窗口上的关闭按钮

    原文 [WPF疑难]如何禁用窗口上的关闭按钮 [WPF疑难]如何禁用窗口上的关闭按钮                                           周银辉 哈哈,主要是调用Rem ...

  3. 【WPF】TabControl禁用部分选项卡

    需求:使用TabControl分页栏控件时,由于部分分页下的内容尚未开发完成,不希望用户能够点击切换到那些分页. 百度搜到的一些做法比较麻烦,或者说是直接把分页移除的,这些都不符合需求.需求要的是能看 ...

  4. WPF中如何禁用空格键(或其他键)

    在选择的控件中添加KeyDown event method private void OnKeyDown(object sender, KeyEventArgs e){ if (e.Key == Ke ...

  5. WPF窗体禁用最大化按钮

    禁用WPF窗体的最大化按钮可以使用Windows API改变按钮状态的方法实现.使用GetWindowLong可以得到当前按钮的状态.使用SetWindowLong可以设置按钮的状态.使用SetWin ...

  6. WPF编程,窗体最大化、最小化、关闭按钮功能的禁用

    原文:WPF编程,窗体最大化.最小化.关闭按钮功能的禁用 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/detail ...

  7. WPF 自定义命令 以及 命令的启用与禁用

    自定义命令:     在WPF中有5个命令类(ApplicationCommands.NavigationCommands.EditingCommands.ComponentCommands 以及 M ...

  8. WPF 控件被禁用,悬浮提示不显示问题

    原文:WPF 控件被禁用,悬浮提示不显示问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/89 ...

  9. ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成

    ASP.NET Boilerplate 学习   1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...

随机推荐

  1. 那些遇到的position-fixed无效事件

    本篇文章由:http://xinpure.com/position-fixed-encountered-an-invalid-event/ 第一次无效事件 事件主角: transform 应用环境: ...

  2. Extending and Embedding PHP

    Extending and Embedding PHP http://wizardmin.com/2010/08/extending-and-embedding-php-6/

  3. shell 编程之2>&1含义

    http://blog.csdn.net/gyanp/article/details/7258356 经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用 /tmp/test.sh ...

  4. Android音乐播放器开发

    今日看书,看到这个播放器,我就写了个例子,感觉还行,这个播放器能播放后缀是.MP3的音乐,这个例子在main.xml设置listView的时候,注意:android:id="@+id/and ...

  5. ASP.NET CORE 学习之自定义异常处理

    为什么异常处理选择中间件? 传统的ASP.NET可以采用异常过滤器的方式处理异常,在ASP.NET CORE中,是以多个中间件连接而成的管道形式处理请求的,不过常用的五大过滤器得以保留,同样可以采用异 ...

  6. python练习笔记——利用信号signal处理僵尸进程

    1 signal处理僵尸进程的基于语法 利用信号signal处理僵尸进程的方法:signal(SIGCHLD,SIG_IGN),该方法也是第三种处理僵尸进程的方法. SIGCHLD:子进程状态改变后产 ...

  7. go 学习笔记(1)--package

    引入包有以下几种方式: 1. 最简单的方式引入一个包的方式是直接引入包,例如: import "fmt" import "os" 2. 也可以通过下面的方式将包 ...

  8. OAF_OAF控件系列2 - LOV的实现(案例)

    2014-06-02 Created By BaoXinjian

  9. 在QML应用中实现threading多任务

    在这个样例中,我们将介绍怎样在QML应用中使用QML语言提供的threading功能,实现多任务. 很多其它的阅读在:http://doc.qt.io/qt-5/qtquick-threading-e ...

  10. Ext.net控件调整后台事件、方法论

    一.以ext.net的button为例调用后台事件: 前台代码: <ext:Button ID="Button1" runat="server" Text ...