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>

 

 

 结果图:

 

posted @ 2016-12-19 16:19  Jane&Coding  阅读(244)  评论(0)    收藏  举报