附效果照一张:

本方法使用StyleSelector来 获得依据自定义逻辑的style。

 class ConditionalStyleSelector : StyleSelector
{
public override Style SelectStyle(object item,DependencyObject container)
{
object conditionValue = this.ConditionConverter.Convert(item, null, null, null);
foreach (ConditionalStyleRule rule in this.Rules)
{
if (Equals(rule.Value, conditionValue))
{
return rule.Style;
}
} return base.SelectStyle(item, container);
} List<ConditionalStyleRule> _Rules;
public List<ConditionalStyleRule> Rules
{
get
{
if (this._Rules == null)
{
this._Rules = new List<ConditionalStyleRule>();
} return this._Rules;
}
} IValueConverter _ConditionConverter;
public IValueConverter ConditionConverter
{
get
{
return this._ConditionConverter;
}
set
{
this._ConditionConverter = value;
}
}
} public class ConditionalStyleRule
{
object _Value;
public object Value
{
get
{
return this._Value;
}
set
{
this._Value = value;
}
} Style _Style;
public Style Style
{
get
{
return this._Style;
}
set
{
this._Style = value;
}
}
}

其中,object conditionValue = this.ConditionConverter.Convert(item, null, null, null);这句话是俺用来进行条件转换的,将输入的条件转换成true或false。(可以转换成各种各样的东西,只要你能在后边拿他来与你定义的样式判断就好)

foreach是俺用来寻找转换后的结果有没有对应样式的

②上面就是主菜,下面说说配菜:

List<ConditionalStyleRule> _Rules;样式的键值对,这个我是在前台xaml里给他赋值的,后边再表。

IValueConverter _ConditionConverter;将输入条件经逻辑判断后返回一个东西来与键值对比较的东西(脱了裤子放屁的设计哈,屎量比较小不怕弄坏裤子的可以放弃他,不用这封装的东西直接与键值对比较)。

public class ConditionalStyleRule{...}这个不用说了吧,封装数据结构的。

③配菜也说完了,嗯,也没大说完,那个IValueConverter还没说:

 class COMStateConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
COM tempCOM = value as COM; if (tempCOM != null)
{
return tempCOM.StateCode == "" ? true : false;
} return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion

就是一IValueConverter接口,实现了源数据类型以及目标数据类型之间的转换。具体咋回事度娘去吧。

④最后说一下前台xaml的使用

    <UserControl.Resources>
<Style x:Key="HighUnitPriceStyle"
TargetType="GridViewRow">
<Setter Property="Background" Value="red" />
<Setter Property="Foreground" Value="blue" />
</Style>
<Style x:Key="LowUnitPriceStyle" TargetType="GridViewRow"/>
<cc:COMStateConverter x:Key="Convert" />
<cc:ConditionalStyleSelector x:Key="selector" ConditionConverter="{StaticResource Convert}">
<cc:ConditionalStyleSelector.Rules>
<cc:ConditionalStyleRule Style="{StaticResource HighUnitPriceStyle}">
<cc:ConditionalStyleRule.Value>
<sys:Boolean>True</sys:Boolean>
</cc:ConditionalStyleRule.Value>
</cc:ConditionalStyleRule>
<cc:ConditionalStyleRule Style="{StaticResource LowUnitPriceStyle}">
<cc:ConditionalStyleRule.Value>
<sys:Boolean>False</sys:Boolean>
</cc:ConditionalStyleRule.Value>
</cc:ConditionalStyleRule>
</cc:ConditionalStyleSelector.Rules>
</cc:ConditionalStyleSelector>
</UserControl.Resources>

然后在DataGrid或GridView中塞进RowStyleSelector="{StaticResource selector}"就好了。上面的代码样式我随便塞了个红蓝进去,具体样式自己整吧。哈

[WPF]GridView或DataGrid中自定义样式:依据某一列设定其对应行的样式(背景色,字体等)的更多相关文章

  1. JQuery easyUi datagrid 中 自定义editor作为列表操作按钮列

    转自   http://blog.csdn.net/tianlincao/article/details/7494467 前言 JQuery easyUi datagrid 中 使用datagrid生 ...

  2. shiro中自定义realm实现md5散列算法加密的模拟

    shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一 ...

  3. WPF学习笔记(7):DataGrid中数字自定义格式显示

    DataGrid中数据显示如下图,数据格式比较杂乱.希望达到以下要求:(1)所有数据保留两位小数:(2)超过1000的数字显示千分位:(3)如果数据为0,不显示. 首先想到用StringFormat进 ...

  4. WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探

    原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探         最近因为项目需要,开始学习如何使用WPF开发桌面程序.使用WPF一段时间之后,感 ...

  5. wpf 获取datagrid中模板中控件

    //获取name为datagrid中第三列第一行模板的控件 FrameworkElement item = dataGrid.Columns[].GetCellContent(dataGrid.Ite ...

  6. GridView控件中插入自定义删除按钮并弹出确认框

    GridView控件中插入自定义删除按钮,要实现这个功能其实有多种方法,这里先记下我使用的方法,以后再添加其他方法. 一.实现步骤 1.在GridView中添加模板列(TemplateField). ...

  7. 在WPF中自定义你的绘制(五)

    原文:在WPF中自定义你的绘制(五) 在WPF中自定义你的绘制(五)                                                                   ...

  8. 在WPF中自定义你的绘制(三)

    原文:在WPF中自定义你的绘制(三) 在WPF中自定义你的绘制(三)                                                                  ...

  9. 在WPF中自定义你的绘制(四)

    原文:在WPF中自定义你的绘制(四)                                   在WPF中自定义你的绘制(四)                                 ...

随机推荐

  1. phpMyAdmin - 错误 您应升级到 MySQL 5.5.0 或更高版本,解决办法。。。

    折腾自己的个人网站,装了个数据库管理工具,遇到您应升级到 MySQL 5.5.0 或更高版本... 采用降级phpmyadmin版本的方法解决了: 查找phpmyadmin/libraries/com ...

  2. 通过select的value值来改变textarea内字体和大小

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. virtual_login

    from selenium import webdriverimport timedriver = webdriver.Chrome()driver.set_window_position(30, 4 ...

  4. widows下node.js环境搭建及运行js

    昨天刚刚开始学习node.js,网上一些教程不是很清楚,所以总结一下我的经验. 1.安装. 安装省略,就到官网上去下载安装一下就好.安装完成之后,打开cmd,输入"path",查看 ...

  5. Bootstrap<基础十七>导航栏

    导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点.导航栏在您的应用或网站中作为导航页头的响应式基础组件.导航栏在移动设备的视图中是折叠的,随着可用视口宽度的增加,导航栏也会水平展开. ...

  6. 使用CSDN Code将网站部署到Windows Azure Website上

    在云计算时代,开发和部署应该是完全统一和集成的.在海外,开发者可以用github来管理他们的代码,并且直接部署到Windows Azure上.随着Windows Azure在国内的发布,我们发现,其实 ...

  7. js页面跳转的方式

    js方式的页面跳转1.window.location.href方式    <script language="javascript" type="text/java ...

  8. 用ant组建测试框架

    有时候由于公司网络或其它原因,无法采用maven,这时ant是一个比较理想的选择.以下是以ant为例,搭建一个测试框架 项目结构如下图: build.properties代码如下: # The sou ...

  9. 【转】关于Oracle将小于1的数字to_char后丢掉0的解决办法

    SQL代码如下: select rtrim(to_char(0.11, 'fm9990.99'), '.') from dual; 其中0.11为需要to_char的数字fm去掉字符串前面的空格999 ...

  10. oracle 用户创建这个挺靠谱

    CREATE TEMPORARY TABLESPACE test_tempTEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test_temp01.dbf ...