wpf 怎么重绘wpf listboxx让某一项变成灰色

2017年6月 总版技术专家分月排行榜第三
2017年9月 .NET技术大版内专家分月排行榜第一2017年8月 多媒体开发大版内专家分月排行榜第一2017年8月 .NET技术大版内专家分月排行榜第一2017年7月 多媒体开发大版内专家分月排行榜第一2017年7月 .NET技术大版内专家分月排行榜第一2017年6月 .NET技术大版内专家分月排行榜第一2017年5月 多媒体开发大版内专家分月排行榜第一2017年4月 多媒体开发大版内专家分月排行榜第一2016年1月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年11月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年10月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年3月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2015年1月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2014年12月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2014年11月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2014年10月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2014年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2014年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2014年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。本帖子已过去太久远了,不再提供回复功能。posts - 21,&
comments - 0,&
trackbacks - 0
设置之后的效果为
1&窗体中代码
&Window x:Class="QyNodeTest.MainWindow"&&&&&&& xmlns="/winfx/2006/xaml/presentation"&&&&&&& xmlns:x="/winfx/2006/xaml"&&&&&&& Title="MainWindow" Height="350" Width="525"&&&& &Window.Resources&&&&&&&& &ResourceDictionary&&&&&&&&&&&& &ResourceDictionary.MergedDictionaries&&&&&&&&&&&&&&&& &ResourceDictionary Source="Style/Style.xaml"/&&&&&&&&&&&& &/ResourceDictionary.MergedDictionaries&&&&&&&& &/ResourceDictionary&&&& &/Window.Resources&&&& &Grid&&&&&&&& &ListBox Style="{StaticResource ListBoxHor}"&&&&&&&&&&&& &ListBoxItem&&&&&&&&&&&&&&&& &Border&&&&&&&&&&&&&&&&&&&& &StackPanel&&&&&&&&&&&&&&&&&&&&&&&& &TextBlock HorizontalAlignment="Center"&项目1&/TextBlock&&&&&&&&&&&&&&&&&&&&&&&& &Button Content="OK" Width="80" HorizontalAlignment="Center"/&&&&&&&&&&&&&&&&&&&& &/StackPanel&&&&&&&&&&&&&&&& &/Border&&&&&&&&&&&& &/ListBoxItem&&&&&&&&&&&& &ListBoxItem&&&&&&&&&&&&&&&& &Border&&&&&&&&&&&&&&&&&&&& &StackPanel&&&&&&&&&&&&&&&&&&&&&&&& &TextBlock HorizontalAlignment="Center"&项目1&/TextBlock&&&&&&&&&&&&&&&&&&&&&&&& &Button Content="OK" Width="80" HorizontalAlignment="Center"/&&&&&&&&&&&&&&&&&&&& &/StackPanel&&&&&&&&&&&&&&&& &/Border&&&&&&&&&&&& &/ListBoxItem&&&&&&&&&&&& &ListBoxItem&&&&&&&&&&&&&&&& &Border&&&&&&&&&&&&&&&&&&&& &StackPanel&&&&&&&&&&&&&&&&&&&&&&&& &TextBlock HorizontalAlignment="Center"&项目1&/TextBlock&&&&&&&&&&&&&&&&&&&&&&&& &Button Content="OK" Width="80" HorizontalAlignment="Center"/&&&&&&&&&&&&&&&&&&&& &/StackPanel&&&&&&&&&&&&&&&& &/Border&&&&&&&&&&&& &/ListBoxItem&&&&&&&&&&&& &ListBoxItem&&&&&&&&&&&&&&&& &Border&&&&&&&&&&&&&&&&&&&& &StackPanel&&&&&&&&&&&&&&&&&&&&&&&& &TextBlock HorizontalAlignment="Center"&项目1&/TextBlock&&&&&&&&&&&&&&&&&&&&&&&& &Button Content="OK" Width="80" HorizontalAlignment="Center"/&&&&&&&&&&&&&&&&&&&& &/StackPanel&&&&&&&&&&&&&&&& &/Border&&&&&&&&&&&& &/ListBoxItem&&&&&&&& &/ListBox&&&& &/Grid&&/Window&
2&样式文件中代码
&!--设置ListBox样式--&
&Style TargetType="ListBox" x:Key="ListBoxHor"&
  & &!--设置模板--&&&&&&&& &Setter Property="Template"&&&&&&&&&&&& &Setter.Value&&&&&&&&&&&&&&&& &ControlTemplate TargetType="ListBox"&&&&&&&&&&&&&&&&&&&& &ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"&&&&&&&&&&&&&&&&&&&&&&&& &WrapPanel Orientation="Horizontal" IsItemsHost="True" ScrollViewer.CanContentScroll="True"/&&&&&&&&&&&&&&&&&&&& &/ScrollViewer&&&&&&&&&&&&&&&& &/ControlTemplate&&&&&&&&&&&& &/Setter.Value&&&&&&&& &/Setter&&&& &/Style&
&& &!--设置ListBoxItem样式--&&&& &Style TargetType="ListBoxItem"&&&&&&&& &Setter Property="Width" Value="120"&&/Setter&&&&&&&& &Setter Property="Height" Value="40"&&/Setter&&&&&&&& &Setter Property="Margin" Value="5"&&/Setter&&&&&&&& &Setter Property="BorderBrush" Value="Red"/&&&&&&&& &Setter Property="BorderThickness" Value="1"/&&&&&&&& &!--设置控件模板--&&&&&&&& &Setter Property="Template"&&&&&&&&&&&& &Setter.Value&&&&&&&&&&&&&&&& &ControlTemplate TargetType="ListBoxItem"&&&&&&&&&&&&&&&&&&&& &Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"&&&&&&&&&&&&&&&&&&&&&&&& &ContentPresenter HorizontalAlignment="Center" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" TextBlock.Foreground="{TemplateBinding Foreground}"/&&&&&&&&&&&&&&&&&&&& &/Border&&&&&&&&&&&&&&&& &/ControlTemplate&&&&&&&&&&&& &/Setter.Value&&&&&&&& &/Setter&&&&&&&& &!--设置触发器--&&&&&&&& &Style.Triggers&&&&&&&&&&&& &Trigger Property="IsSelected" Value="true"&&&&&&&&&&&&&&&& &Setter Property="Background" Value="#808080"/&&&&&&&&&&&&&&&& &Setter Property="Foreground" Value="White"/&&&&&&&&&&&&&&&& &Setter Property="BorderBrush" Value="Green"/&&&&&&&&&&&&&&&& &Setter Property="BorderThickness" Value="2"/&&&&&&&&&&&& &/Trigger&&&&&&&&&&&& &Trigger Property="IsMouseOver" Value="true"&&&&&&&&&&&&&&&& &Setter Property="Background" Value="Red"/&&&&&&&&&&&&&&&& &Setter Property="BorderBrush" Value="Black"/&&&&&&&&&&&&&&&& &Setter Property="BorderThickness" Value="2"/&&&&&&&&&&&& &/Trigger&&&&&&&& &/Style.Triggers&&&& &/Style&
阅读(...) 评论()随笔 - 52&
评论 - 31&
&&&&&&&&&&&
当Listbox失去焦点的时候,选中项会从蓝色变成灰色,灰色不大醒目,我们想看清我们选中的是哪一项比较困难,下面的代码可以在Listbox失去焦点的时候把选中项仍然置为蓝色。&Style&TargetType="ListBoxItem"&&&&&&Style.Resources&&&&&&&&&&!--SelectedItem&with&focus--&&&&&&&&&&SolidColorBrush&x:Key="{x:Static&SystemColors.HighlightBrushKey}"&Color="LightBlue"&Opacity=".4"/&&&&&&&&&&!--SelectedItem&without&focus--&&&&&&&&&&SolidColorBrush&x:Key="{x:Static&SystemColors.ControlBrushKey}"&Color="LightBlue"&Opacity=".4"/&&&&&&/Style.Resources&&/Style&&
阅读(...) 评论()下次自动登录
现在的位置:
& 综合 & 正文
C#中动态修改ListBox的Item的颜色的方法
最近搞了C#需要在ListBox中显示不同类型的数据,为了让用户容易区分,增加了颜色区分的功能,就是需要不同的类型数据显示出不同的颜色。针对上述的要求我们需要使用控件的重绘方法,就是用重绘的方法激活重绘事件,在重绘事件内修改Item的字体颜色。方法如下(基于DrawItem事件)
一、新建一个C#的窗口应用程序,在form1内添加一个ListBox控件,一个TextBox控件,一个按钮控件;我们要求如下:按一次按钮将文本框内的内容添加到ListBox内,并且ListBox在显示的时候根据Item的内容显示不同的颜色,比如添加的Item内包含了"你好",那么这个Item用绿色来显示;如果包含了"你坏"用红色来表示。界面如下图所示:
二、界面准备完成,我们需要对ListBox控件的属性进行修改,才能使ListBox控件支持DrawItem的事件,我们要在ListBox控件的【DrawMode】属性修改为下图中的任意一个,具体的区别还没有深入研究,我选择的是【OwnerDrawFixed】属性,如下图:
三、还是要选中ListBox控件,在【事件】属性栏内找到【DrawItem】事件,双击,便在CS文件添加了该控件的DrawItem事件的处理函数。如下图
四、添加相应的处理【一】中需求的方法,比如按钮事件,获取文本框的文本并显示在ListBox内;
五、详细源码
using System.Collections.G
using System.D
using System.D
using System.L
using System.T
using System.Windows.F
namespace TestListBoxColor
public partial class Form1 : Form
public Form1()
InitializeComponent();
// ListBox DrawItem事件响应函数
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
if (e.Index &= 0)
e.DrawBackground();
Brush mybsh = Brushes.B
// 判断是什么类型的标签
if (listBox1.Items[e.Index].ToString().IndexOf("你好") != -1)
mybsh = Brushes.G
else if (listBox1.Items[e.Index].ToString().IndexOf("你坏") != -1)
mybsh = Brushes.R
e.DrawFocusRectangle();
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, mybsh, e.Bounds, StringFormat.GenericDefault);
private void button1_Click(object sender, EventArgs e)
string str = this.textBox1.T
this.listBox1.Items.Add(str);
六、效果如下,当输入“你好”并按添加按钮的时候相应的ListBox的内容变为的绿色,输入“你坏”的时候变为了红色,达到了我们的要求目的:
OK,到此结束,希望对有这种需求的人有帮助。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 wpf canvas的重绘 的文章

 

随机推荐