WPF Tips:DataGrid样式
MainWindow.xaml
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cvt="clr-namespace:WpfApplication1"
...> <Window.Resources> <cvt:RunningStatusConverter x:Key="runningStatusConverter"/> </Window.Resources> ... <DataGrid x:Name="DataGrid_Running" DockPanel.Dock="Top" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding ID}" Width="auto"/> <DataGridTextColumn Header="批次号" Binding="{Binding BATCHNO}" Width="auto"/> <DataGridTextColumn Header="路径" Binding="{Binding SOURCEPATH}" Width="150"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="TextTrimming" Value="CharacterEllipsis"/> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> <DataGridTextColumn Header="总数" Binding="{Binding TOTAL}" Width="80"/> <DataGridTextColumn Header="运行状态" Binding="{Binding ENDTIME, Converter={StaticResource runningStatusConverter}}" Width="*"/> </DataGrid.Columns> </DataGrid>
...
RunningStatusConverter,根据ENDTIME值显示不同结果:
namespace WpfApplication1 { class MyWpfConverter { } public class RunningStatusConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null || String.IsNullOrEmpty(value.ToString())) { return "正在运行..."; } return "暂停中..."; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }
MainWindow.xaml.cs,加载测试用数据
public MainWindow() { InitializeComponent(); this.Loaded += MainWindow_Loaded; } void MainWindow_Loaded(object sender, RoutedEventArgs e) { try { this.DataGrid_Running.Items.Clear(); this.DataGrid_Running.ItemsSource = DataExample.GetDataList(); this.DataGrid_Running.Items.Refresh(); } catch (Exception) { throw; } }
DataExample.cs,用于生成测试用数据
public class DataExample { public static List<Object> GetDataList() { List<Object> list = new List<Object>(); list.Add(new { ID = 1, BATCHNO = "1001", SOURCEPATH = @"\test\test2\test3\test4\test5", TOTAL = 10, ENDTIME = "" }); list.Add(new { ID = 2, BATCHNO = "1001", SOURCEPATH = @"\test\test2\test3\test4\test5", TOTAL = 5, ENDTIME = "" }); list.Add(new { ID = 3, BATCHNO = "1002", SOURCEPATH = @"\test\test2\test3\test4\test5", TOTAL = 6, ENDTIME = DateTime.Now.ToString() }); return list; } }
App.xaml
<Style TargetType="DataGrid"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> </Style.Resources> <Setter Property="VerticalAlignment" Value="Top"/> <Setter Property="HorizontalAlignment" Value="Stretch"/> <Setter Property="AutoGenerateColumns" Value="False"/> <Setter Property="SelectionUnit" Value="FullRow"/> <Setter Property="IsReadOnly" Value="True"/> <Setter Property="CanUserAddRows" Value="False"/> <Setter Property="RowBackground" Value="#AAEAEFF4" /> <Setter Property="AlternatingRowBackground" Value="#FFE9F3F5" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="HorizontalScrollBarVisibility" Value="Auto" /> <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="SelectionMode" Value="Extended" /> <Setter Property="CanUserReorderColumns" Value="True" /> <Setter Property="CanUserResizeColumns" Value="True" /> <Setter Property="CanUserSortColumns" Value="True" /> <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" /> <Setter Property="FontWeight" Value="Normal"/> <Setter Property="BorderBrush"> <Setter.Value> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="#FFA3AEB9" Offset="0"/> <GradientStop Color="#FF8399A9" Offset="0.375"/> <GradientStop Color="#FF718597" Offset="0.375"/> <GradientStop Color="#FF617584" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="BorderThickness" Value="1" /> <Setter Property="GridLinesVisibility" Value="All" /> <Setter Property="HorizontalGridLinesBrush" Value="#FFC9CACA" /> <Setter Property="IsTabStop" Value="True" /> <Setter Property="VerticalGridLinesBrush" Value="#FFC9CACA" /> <Setter Property="IsSynchronizedWithCurrentItem" Value="True"/> </Style> <Style TargetType="DataGridColumnHeader"> <Setter Property="FontWeight" Value="Normal"/> <Setter Property="FontSize" Value="12"/> <Setter Property="Padding" Value="5"/> </Style> <Style TargetType="DataGridRowHeader"> <Setter Property="Width" Value="15"/> <Style.Triggers> <Trigger Property="IsRowSelected" Value="True"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Border BorderThickness="0,1,0,1" Margin="0,-1,0,0"> <DockPanel> <Path x:Name="arrow" StrokeThickness="1" Fill="Gray" Data="M 5,13 L 10,8 L 5,3 L 5,13"/> </DockPanel> </Border> </ControlTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> <Style TargetType="DataGridRow"> <Setter Property="Height" Value="40"/> <Setter Property="Foreground" Value="Black"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="#FFF0F9FF"/> </Trigger> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="LightBlue"/> </Trigger> </Style.Triggers> </Style> <Style TargetType="DataGridCell"> <Setter Property="FontSize" Value="12"/> <Setter Property="Padding" Value="5"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text}"/> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Foreground" Value="Black"/> </Trigger> </Style.Triggers> </Style>
结果图:


浙公网安备 33010602011771号