WPF在資料列使用列舉時,通過列舉列設定DataGrid單元格或者行的樣式
阿新 • • 發佈:2021-12-20
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>
以上是設定行樣式。