WPF學習筆記-DataGrid后台動態生成列,設置列樣式並使用值轉換器


一、后台動態生成DataGrid的列

1 HistoricalDataDG.Columns.Clear();
2 HistoricalDataDG.Columns.Add(new DataGridTextColumn() { Header = "時間", ElementStyle = (System.Windows.Style)FindResource("TbrqStyle"), IsReadOnly = true });
3 HistoricalDataDG.Columns.Add(new DataGridTextColumn() { Header = "T01(℃)", Binding = new Binding("T01"), ElementStyle = (System.Windows.Style)FindResource("dgCell_T01"), IsReadOnly = true});

在后台使用前台xaml里的style  使用FindResource()

二、設置列樣式並使用值轉換器

前台設置的樣式代碼

<UserControl.Resources>
        <ResourceDictionary>
<root:DGColorConverter x:Key="DGColorConverter"/>
<Style x:Key="TbrqStyle" TargetType="TextBlock"> <Setter Property="Text" Value="{Binding Path=Tbrq,StringFormat='yyyy-MM-dd HH:mm:ss'}"> </Setter> </Style> <Style x:Key="dgCell_T01" TargetType="TextBlock"> <!-- 文本居中--> <Setter Property="TextAlignment" Value="Center"/> <!-- 根據其他列的值設置文本顏色--> <Setter Property="Foreground"> <Setter.Value> <MultiBinding Converter="{StaticResource DGColorConverter}"> <Binding Path="T01"></Binding> <Binding Path="High_Temperature"></Binding> <Binding Path="Mim_Temperature"></Binding> </MultiBinding> </Setter.Value> </Setter> </Style> </ResourceDictionary> </UserControl.Resources>

TbrqStyle設置時間顯示格式為24小時制,在實際使用時發現后台不能設置Binding,否則顯示格式無效

值轉換器DGColorConverter

 1 public class DGColorConverter : IMultiValueConverter
 2 {
 3         /// 需傳入一組對象,(基礎值 比對值)
 4         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 5         {
 6             if (values[0] == DependencyProperty.UnsetValue)
 7             {
 8                 return "";
 9             }
10                 
11             float tvalue = float.Parse(values[0].ToString());
12             float hvalue = float.Parse(values[1].ToString());
13             float mvalue = float.Parse(values[2].ToString());
14             if (tvalue > hvalue || tvalue < mvalue)
15             {
16                 return new SolidColorBrush(Colors.Red);
17             }
18             else
19             {
20                 return new SolidColorBrush(Colors.Black);
21             }
22         }
23 
24         public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
25         {
26             throw new NotImplementedException();
27         }
28 }

通過與其他列的值進行比較,使當前列的文字顯示不同顏色

參考

https://www.cnblogs.com/jameslif/archive/2013/07/24/3209955.html

https://www.cnblogs.com/woodenmancool/p/4268539.html?utm_source=tuicool&utm_medium=referral

http://www.cnblogs.com/lingboxingzi/archive/2012/05/09/2491478.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM