WPF列表视图在运行时将图像添加到列表视图中
本文关键字:列表 视图 添加 图像 运行时 WPF | 更新日期: 2023-09-27 18:03:45
大家好,我正在c# WPF中做一个项目,我需要在列表视图中显示客户端的状态所以我有下面的enum,它定义了一个客户端状态
//Values used here for Bitwise Operations
public enum ClientStatus
{
NONE = 0,
NEWCLIENT = 1,
MONITORED = 2,
IMPORTAND = 4,
DISATISFIED = 8,
DETERIORATING = 16,
SATISFIED = 32
};
将每个转换为特定的画笔,我有以下代码,经过测试,它可以工作
[ValueConversion(typeof(Enums.ClientStatus), typeof(Brush))]
public class StateValueColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Brush Brush = Brushes.Red;
if (value is Enums.ClientStatus)
{
Enums.ClientStatus sv = (Enums.ClientStatus)value;
switch (sv)
{
case Enums.ClientStatus.IMPORTAND:
Brush = Brushes.Blue;
break;
case Enums.ClientStatus.MONITORED:
Brush = Brushes.Purple;
break;
case Enums.ClientStatus.NEWCLIENT:
Brush = Brushes.Orange;
break;
case Enums.ClientStatus.SATISFIED:
Brush = Brushes.Green;
break;
case Enums.ClientStatus.DETERIORATING:
Brush = Brushes.Yellow;
break;
case Enums.ClientStatus.DISATISFIED:
Brush = Brushes.Red;
break;
}
}
return Brush;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我做了下面的事情,这不是我们的讲师真正想要的
<GridViewColumn Header="Status" Width="110">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Width="50" Background="{Binding Path=Status, Converter={StaticResource ColorConverter}}"></TextBox>
<TextBox Width="50" Background="{Binding Path=SatisFactory, Converter={StaticResource ColorConverter}}"></TextBox>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我们需要将每个枚举显示为不同的颜色,但是客户端可以有多个状态,即
var status = ClientStatus.NEWCLIENT | ClientStatus.SATISFIED;
现在将返回int值33
我现在的问题是我在客户端使用了两个属性来显示不同的状态,这是不正确的,我们需要使用按位操作,即
if ((status & ClientStatus.NEWCLIENT) == ClientStatus.NEWCLIENT)
{
//do whatever
}
所以我可以做上面的代码但是我如何在一个属性上绑定在一个gridviewcolumn中显示多个颜色,我搜索了论坛但是我错过了如果这个问题或类似的东西在那里
我真的不知道该如何表达这个问题,所以我将试着用其他的话来表达
我想显示列中所有选定的枚举。
谢谢你的帮助和建议希望我说的有意义
如果我正确理解你的问题,你想在枚举中显示一个图标,图像或UI元素的每个值,并有它们是可见的,如果对象的状态匹配该值。
我想我会创建一个简单的StackPanel包含所有的UI元素,如:
<StackPanel Orientation="Horizontal">
<Rectangle Fill="Blue"
Visibility="{Binding Status,
Converter={StaticResource StatusToVisibilityConverter},
ConverterParameter=NEWCLIENT}" />
<Rectangle Fill="Green"
Visibility="{Binding Status,
Converter={StaticResource StatusToVisibilityConverter},
ConverterParameter=SATISFIED}" />
...
</StackPanel>
然后在你的StatusToVisibilityConverter中比较Status的值与ConverterParameter中的值(你可以用TryParse静态方法将其转换为枚举的值)。
希望对你有帮助。
定义DataTemplate名称StatusDataTemplate,或者为enum定义一个默认的DataTemplate。ClientStatus为TargetType。
在这个模板中,定义一个3列X 2行网格。在每个网格单元中,定义一个Border,使用6个enum中的一个作为ConverterParameter作为背景绑定,具有返回"正确"颜色的转换器,如果值和参数= parameter,则透明。
那么你可以使用:
<ContentPresenter Content="{Binding Status}" />
…如果您使用默认的DTpl
或:
<ContentPresenter Content="{Binding Status}" ContentTemplate="{StaticResource StatusTemplate}"/>