Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf listview在运行时将图像添加到listviewitem中_C#_Wpf_Enums_Bit Manipulation - Fatal编程技术网

C# wpf listview在运行时将图像添加到listviewitem中

C# wpf listview在运行时将图像添加到listviewitem中,c#,wpf,enums,bit-manipulation,C#,Wpf,Enums,Bit Manipulation,大家好,我正在C#WPF的一个项目中工作,我需要在列表视图中显示客户的状态 因此,我有下面的枚举来定义客户机状态 //Values used here for Bitwise Operations public enum ClientStatus { NONE = 0, NEWCLIENT = 1, MONITORED = 2, IMPORTAND = 4, DISATISFIED = 8, DETERIORATING = 16,

大家好,我正在C#WPF的一个项目中工作,我需要在列表视图中显示客户的状态 因此,我有下面的枚举来定义客户机状态

//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>
现在将返回一个int值33

我现在的问题是我在客户端使用了两个属性来显示不同的状态,这是不正确的,我们需要使用位操作

if ((status & ClientStatus.NEWCLIENT) == ClientStatus.NEWCLIENT)
{
    //do whatever
}
所以我可以做上面的代码,但我如何在一个属性上进行绑定,以在一个gridviewcollumn中显示多个颜色,我搜索了论坛,但如果有这个问题或类似的问题,我就错过了它

我真的不知道如何陈述这个问题,所以我将尝试换言之

我想在列中显示所有选定的枚举

谢谢你的帮助和建议
希望我说的是

如果我正确理解了您的问题,您希望为枚举中的每个值显示一个图标、图像或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中的值进行比较(您可以使用静态方法将其转换为枚举的值)


希望对您有所帮助。

将DataTemplate名称StatusDataTemplate或Enums.ClientStatus的默认DataTemplate定义为TargetType。
在此模板中,定义一个3列X 2行的网格。
在每个网格单元中,定义一个边框,使用6个enum as ConverterParameter中的一个作为绑定的背景,使用一个转换器,如果value和parameter=parameter,则返回“right”颜色,否则为透明

然后您可以使用:

<ContentPresenter Content="{Binding Status}" />   

…如果使用默认的DTpl

或:


谢谢,我了解这个方法,我将尝试这个方法,并得出一个结果:D
<ContentPresenter Content="{Binding Status}" />   
<ContentPresenter Content="{Binding Status}" ContentTemplate="{StaticResource StatusTemplate}"/>