110,538
社区成员
发帖
与我相关
我的任务
分享
<StackPanel Orientation="Vertical" MinHeight="80" Margin="0,10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<DataGrid x:Name="dgDutyInfo" ItemsSource="{Binding DutyInfoes, Mode=TwoWay}" Style="{StaticResource MainDataGridStyle}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding SN,Mode=TwoWay}" Width="60"/>
<DataGridTextColumn Binding="{Binding UserName,Mode=TwoWay}" Width="100"/>
<DataGridTextColumn Binding="{Binding RoleName,Mode=TwoWay}" Width="100"/>
<DataGridTemplateColumn x:Name="dgtcMonday" MinWidth="120" HeaderTemplate="{StaticResource MondayMergeHeader}" CellTemplate="{StaticResource MondayMergeColumn}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
<DataTemplate x:Key="MondayMergeHeader">
<StackPanel x:Name="spnlMonday" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent"
DataContext="{Binding ElementName=dutyInfoManageView,Path=DataContext.TemplateHeaders[0],Mode=TwoWay}">
<Border>
<Label Content="{Binding Date,Mode=TwoWay}" HorizontalContentAlignment="Center"/>
</Border>
<Border>
<Label Content="{Binding DayOfWeek,Mode=TwoWay}" HorizontalContentAlignment="Center"/>
</Border>
<Border>
<GridSplitter BorderBrush="Gray" BorderThickness="0.5" HorizontalAlignment="Stretch"/>
</Border>
<Border x:Name="borderMonday" DataContext="{Binding MealTimes,Mode=TwoWay}" Background="Transparent" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="180">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding ElementName=dutyInfoManageView,Path=DataContext.HeaderTemplateLoaded}" CommandParameter="{Binding ElementName=borderMonday}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Border>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="MondayMergeColumn">
<Border x:Name="borderMonday" IsEnabled="{Binding ElementName=dutyInfoManageView,Path = DataContext.IsEnabledEdit,Mode=TwoWay}"
DataContext="{Binding Monday,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="180">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding ElementName=dutyInfoManageView,Path=DataContext.DataTemplateLoaded}" CommandParameter="{Binding ElementName=borderMonday}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Border>
</DataTemplate>
<!--DataGridRowStyle-->
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridRow}">
<Border x:Name="DGR_Border" Background="Transparent" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
<SelectiveScrollingGrid Background="Transparent">
<SelectiveScrollingGrid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</SelectiveScrollingGrid.ColumnDefinitions>
<SelectiveScrollingGrid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</SelectiveScrollingGrid.RowDefinitions>
<!--设置行中的单元格-->
<DataGridCellsPresenter Margin="0,0,0,0" Background="Transparent" Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
<DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/>
<DataGridRowHeader Background="Transparent" Grid.Row="0" Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
</SelectiveScrollingGrid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<!--选择行颜色-->
<Setter Property="Background" TargetName="DGR_Border" Value="#5C686B"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<!--鼠标悬浮颜色-->
<Setter Property="Background" TargetName="DGR_Border" Value="#BAC4D5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--DataGridCellStyle-->
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="MinHeight" Value="25"></Setter>
<!--<Setter Property="IsEnabled" Value="False"></Setter>-->
<!--<Setter Property="Margin" Value="0,0,1,0"></Setter>-->
<!--<Setter Property="BorderThickness" Value="1,0,1,1"/>-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<!--- BorderBrush="#2A3A57" Margin="-1,0,0,0" BorderThickness="1,0,0,0"-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<!-- BorderBrush="#2A3A57" Margin="-2,0,-1,0" BorderThickness="0,0,1,0"-->
<Border Grid.Row="0" Background="{Binding Converter={StaticResource DataGridCellBackgroundConverter}}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
</Trigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
没有RowHeaderStyle定义,自己定义好 添加到里面就行了。
<Style TargetType="{x:Type DataGrid}">
<Setter Property="CanUserResizeColumns" Value="False"></Setter>
<Setter Property="CanUserAddRows" Value="False"></Setter>
<Setter Property="CanUserResizeRows" Value="False"></Setter>
<Setter Property="AutoGenerateColumns" Value="False"></Setter>
<Setter Property="Background" Value="Transparent"></Setter>
<!--<Setter Property="BorderBrush" Value="red"></Setter>
<Setter Property="BorderThickness" Value="1,0,0,0"></Setter>-->
<Setter Property="RowHeaderWidth" Value="0"></Setter>
<Setter Property="HorizontalScrollBarVisibility" Value="Auto"></Setter>
<Setter Property="VerticalScrollBarVisibility" Value="Auto"></Setter>
<Setter Property="VerticalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#2C3D5A"></SolidColorBrush>
</Setter.Value>
</Setter>
<Setter Property="HorizontalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#2C3D5A"></SolidColorBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border x:Name="BDataGrid" Background="Transparent" BorderBrush="#2A3A57" Padding="0" BorderThickness="1">
<ScrollViewer Focusable="False" x:Name="DG_ScrollViewer">
<ScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.RowDefinitions>
<!--行标题-->
<RowDefinition Height="auto"></RowDefinition>
<!--内容-->
<RowDefinition Height="*"></RowDefinition>
<!--最右侧部分-->
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<!--行标题宽度-->
<ColumnDefinition Width="auto"></ColumnDefinition>
<!--中间内容宽度-->
<ColumnDefinition Width="*"></ColumnDefinition>
<!--滚动条列宽度-->
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<!--出现滚动条时右上角部分-->
<Border x:Name="BRight" Panel.ZIndex="5" Margin="-2,0,-1,0" Grid.Row="0" Grid.Column="2" Background="#BDC7D7" BorderBrush="#2C3D5A" BorderThickness="0,0,1,1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></Border>
<!--中间列集合显示-->
<DataGridColumnHeadersPresenter Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="0" x:Name="PART_ColumnHeadersPresenter">
<DataGridColumnHeadersPresenter.Visibility>
<Binding Path="HeadersVisibility" RelativeSource="{RelativeSource FindAncestor, AncestorLevel=2, AncestorType={x:Type DataGrid}}">
<Binding.ConverterParameter>
<DataGridHeadersVisibility>Column</DataGridHeadersVisibility>
</Binding.ConverterParameter>
</Binding>
</DataGridColumnHeadersPresenter.Visibility>
</DataGridColumnHeadersPresenter>
<!--滚动条显示-->
<ScrollContentPresenter CanContentScroll="{TemplateBinding ScrollViewer.CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="True" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="0" Grid.ColumnSpan="2" Grid.Row="1" Grid.Column="0" x:Name="PART_ScrollContentPresenter" />
<!--垂直滚动条显示-->
<ScrollBar VerticalAlignment="Stretch" Grid.Column="2" Grid.Row="1" Maximum="{TemplateBinding ScrollableHeight}" x:Name="PART_VerticalScrollBar" Orientation="Vertical" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
<!--水平滚动条显示-->
<Grid Grid.Column="1" Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGrid}}}" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ScrollBar Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Visibility" Value="Collapsed" SourceName="PART_VerticalScrollBar">
<!--当垂直滚动条消失,显示BRight最右侧垂直线-->
<Setter Property="Margin" TargetName="BRight" Value="-2,0,0,0"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ScrollViewer.Template>
<!--显示列名称-->
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" MinHeight="710" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</ScrollViewer>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="ComputedVerticalScrollBarVisibility" Value="Collapsed" SourceName="DG_ScrollViewer">
<!--当垂直滚动条消失,覆盖最右侧垂直线-->
<Setter Property="Margin" TargetName="DG_ScrollViewer" Value="0,0,-1,0"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Resources>
<!--DataGridColumnHeaderStyle-->
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="MinWidth" Value="0" />
<Setter Property="MinHeight" Value="32" />
<!--<Setter Property="Foreground" Value="White" />-->
<Setter Property="FontSize" Value="13" />
<!--<Setter Property="FontWeight" Value="Bold"></Setter>-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridColumnHeader">
<!--显示列边框为左边框-->
<Border x:Name="BackgroundBorder" Margin="-1,0,0,0" BorderThickness="1,0,1,1" BorderBrush="#2A3A57" Background="#BDC7D7" Width="Auto">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ContentPresenter Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Window x:Class="WpfApp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type StackPanel}" x:Key="ContentStyle">
<Setter Property="Background" Value="Red"/>
</Style>
</Window.Resources>
<Grid >
<DataGrid ItemsSource="{Binding SimpleList}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="col" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Style="{StaticResource ContentStyle}">
<TextBlock Text="{Binding A}" />
<TextBlock Text="{Binding B}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>