1. 程式人生 > 其它 >WPF在資料列使用列舉時,通過列舉列設定DataGrid單元格或者行的樣式

WPF在資料列使用列舉時,通過列舉列設定DataGrid單元格或者行的樣式

WPF的DateGrid樣式可以通過資料繫結和轉換器來設定樣式,通過傳入轉換器的值來進行分類賦值給其它樣式,但是當傳入值為列舉時,又想將轉換器做的比較通用,這個時候可以通過設定列舉的名字來傳入轉換器進行擷取(例:名字_顏色_透明度等,要注意列舉名字中可以使用的特殊字元有那些,同時,如果要設定顏色名字Green等和RGB16進位制同時都可以進行轉換,需要在轉換器裡面擷取加判斷使用哪種給色方式)。比如下面的Demo就是按照:名字_顏色_透明度*10 ,來進行設定的列舉(由於‘#’符號不被列舉允許,改為‘RGB’,再通過轉換器改寫為‘#’,0.5改為5也是同理 例名:STARTED_RGB1874CD_5)

   /// <summary>
    /// 透明度轉換器
    /// </summary>
    public class TransparencyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string strValue = value.ToString();
            string[] test = strValue.Split('_');
            return decimal.Parse(test[2]) / 10;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return "";
        }
    }

    /// <summary>
    /// 色彩轉換器
    /// </summary>
    public class StatusColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string strValue = value.ToString();
            string[] test = strValue.Split('_');
            if (test[1].Contains("RGB"))
            {
                return test[1].Replace("RGB", "#");
            }
            else
            {
                return test[1];
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return "";
        }
    }

  由於都是事先固定的列舉配置,轉換器裡面就可以獲取定值就好。

<DataGridTemplateColumn>
    <DataGridTemplateColumn.Header>
        <TextBlock Text="列名" VerticalAlignment="Center"></TextBlock>
    </DataGridTemplateColumn.Header>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate
> <Grid> <TextBlock Width="100" Height="27" Margin="0" Background="{Binding Path=Status,Converter={StaticResource StatusColorConverter}}" Opacity="{Binding Path=Status,Converter={StaticResource TransparencyConverter}}" ></TextBlock> <TextBlock Text="{Binding StatusName}" Foreground="Black" Opacity="1"/> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>

以上是設定單元格樣式。

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
         <Setter Property="Background" Value="{Binding Status,Converter={StaticResource StatusColorConverter}}"></Setter>
        <Setter Property="Opacity" Value="{Binding Status,Converter={StaticResource TransparencyConverter}}"></Setter>
     </Style>
</DataGrid.RowStyle>

以上是設定行樣式。