<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; }
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)
最终效果如下图:
上篇讲了如何在Blend中绘制圆角矩形(http://blog.csdn.net/johnsuna/archive/2007/08/13/1740781.aspx),本篇继续下一步骤,如何自定义按钮的事件。
无边框透明窗体 设置
WindowStyle="None"--无边框,如果需要其它按钮,如缩小、放大、收缩、关闭按钮,可以自定义
AllowsTransparency="True"-...
WPF 自定义ColorDialog DropDownCustomColorPicker
原文:WPF 自定义ColorDialog DropDownCustomColorPicker
今天分享一个 WPF 版的ColorDialog,该控件源自 这里,不过笔者已经该控件做了大量的修改工作,以适应自己的产品需求,闲话少说,先看看效果图:
1、DropDownCustomColorPicker 效果图
先看原项目的(喜欢这种方式的,请到 这里 下载源码 )
被笔者修改之后的效果图:
二、DropDownCustomColorPicker 四种颜色选择方式
第一种:单击任意一个预定义的颜色即可。
原文:WPF 嵌入Winform GDI 、 开启AllowsTransparenc问题
此文章可以解决2至少2个问题:
1.开启AllowsTransparenc造成的GDI+组件不显示问题
2.WPF 组件无法覆盖嵌入WPF窗口的任何第三方GDI+组件上层
方案1:自制双层
原理:用一个新的窗口来承载GDI+组件,实现 父窗口 拖动、缩放、最小化、最大化 的联动 事件。
原文:WPF命令
“有了路由事件为什么还需要命令系统呢?”。事件的作用是发布、传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件送来的消息事件并不做任何限制,每个接收者可已用自己的行为来响应事件。
就本人而言,C#中关闭应用主要有以下途径:
1.Close():关闭当前窗口,可以在OnClosing和 OnClosed中捕获消息,在OnClosing的时候,可以取消关闭窗口
原文:WPF中自定义MarkupExtension
在介绍这一篇文章之前,我们首先来回顾一下WPF中的一些基础的概念,首先当然是XAML了,XAML全称是Extensible Application Markup Language (可扩展应用程序标记语言),是专门用于WPF技术中的UI设计语言...