- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试自定义 DataGrid 的列标题以显示子列标题,如下面的屏幕截图所示:
我已经为 2 个子列制作了样式,如下面的 XAML 所示:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
xmlns:sl="clr-namespace:UI" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="UI.ColumnHeaderGrid"
mc:Ignorable="d">
<UserControl.Resources>
<Style x:Key="SplitColumnHeaderStyle" TargetType="primitives:DataGridColumnHeader">
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="SeparatorBrush" Value="#FFC9CACA"/>
<Setter Property="Padding" Value="4"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="primitives:DataGridColumnHeader">
<Grid x:Name="Root">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Rectangle x:Name="BackgroundRectangle" Fill="#FF1F3B53" Stretch="Fill" Grid.ColumnSpan="2"/>
<Rectangle x:Name="BackgroundGradient" Stretch="Fill" Grid.ColumnSpan="2">
<Rectangle.Fill>
<LinearGradientBrush EndPoint=".7,1" StartPoint=".7,0">
<GradientStop Color="#FCFFFFFF" Offset="0.015"/>
<GradientStop Color="#F7FFFFFF" Offset="0.375"/>
<GradientStop Color="#E5FFFFFF" Offset="0.6"/>
<GradientStop Color="#D1FFFFFF" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="1"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="3" Text="Headers" TextAlignment="Center"/>
<Rectangle Grid.Row="1" Grid.ColumnSpan="3" Fill="{TemplateBinding SeparatorBrush}" Height="1"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Header 1" TextAlignment="Center"/>
<Rectangle Grid.Row="2" Grid.Column="1" Fill="{TemplateBinding SeparatorBrush}" Width="1"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="Header 2" TextAlignment="Center"/>
<Path x:Name="SortIcon" Grid.Column="2" Fill="#FF444444" Stretch="Uniform" HorizontalAlignment="Left" Margin="4,0,0,0" VerticalAlignment="Center" Width="8" Opacity="0" RenderTransformOrigin=".5,.5" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z "/>
</Grid>
<Rectangle x:Name="VerticalSeparator" Fill="{TemplateBinding SeparatorBrush}" VerticalAlignment="Stretch" Width="1" Visibility="{TemplateBinding SeparatorVisibility}" Grid.Column="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<data:DataGrid x:Name="LayoutRoot">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn HeaderStyle="{StaticResource SplitColumnHeaderStyle}">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderBrush="#FFC9CACA" BorderThickness="0,0,0,0">
<TextBlock Grid.Column="0" Text="{Binding GridData.Column1}"/>
</Border>
<Border Grid.Column="1" BorderBrush="#FFC9CACA" BorderThickness="1,0,0,0">
<TextBlock Grid.Column="0" Text="{Binding GridData.Column2}"/>
</Border>
</Grid>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
现在我想重用和扩展此样式以支持 2->6 个子列标题,但我不知道是否有办法做到这一点,例如 ContentPresenter“覆盖”:
<Style x:Key="SplitColumnHeaderStyle" TargetType="primitives:DataGridColumnHeader">
<Setter property="Template">
<Setter.Value>
...
<ContentPresenter Content="{TemplateBinding Content}".../>
...
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TwoSubColumnHeaderStyle" BasedOn="SplitColumnHeaderStyle">
<Setter property="Content">
<Setter.Value>
<Grid 2x2.../>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ThreeSubColumnHeaderStyle" BasedOn="SplitColumnHeaderStyle">
<Setter property="Content">
<Setter.Value>
<Grid 2x3.../>
</Setter.Value>
</Setter>
</Style>
无论如何,请帮我解决这些问题:
鉴于上述模板,如何支持更多的子列标题,而无需为每个子列标题创建新模板?
假设上述问题已解决。如何在样式之外附加列名称?
请具体说明,因为我才刚刚开始使用 C# 和 Silverlight。
最佳答案
这是一个很好的例子: http://weblogs.asp.net/dwahlin/archive/2009/06/11/customizing-silverlight-3-datagrid-headers.aspx
关于c# - 如何自定义和重用 DataGridColumnHeader 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487539/
我遇到了一个问题,我有一个 DataGridColumnHeader,它正在接收带有下划线的文本作为内容,并且第一个下划线是隐藏的,除非你按 alt(“data_grid_thing”显示为“data
DataGridColumnHeader 发生了什么?当 DataGrid 移入 PresentationFramework 时,它看起来像是被删除了。 最佳答案 DataGridColumnHead
我在 View.cs 中有这段代码 var contextMenu = this.dataGridFacade.GiveContextMenuForDataGrid(this.DataGridAllJ
我在 MVVM 中有一个 DataGrid,它的 ItemsSource 绑定(bind)到一个自定义模型。 此模型中的属性的命名方式与数据库中的对应属性相同。例如: public string St
我想为 WPF DataGrid Column Header 编写样式。我的网格如下 `
我正在尝试自定义 DataGrid 的列标题以显示子列标题,如下面的屏幕截图所示: 我已经为 2 个子列制作了样式,如下面的 XAML 所示:
考虑以下 ViewModel: public class MyViewModel { public ObservableCollection foos { get; set; } } [Pro
如何在 DataGridColumHeader 中使用 DataTriggers?使用下面的这段代码,它不起作用。有人知道我该如何解决这个问题吗?
我有 TextBox 驻留在样式资源字典中的 DataGridColumnHeader 中,TextBox 用作过滤器,所以我需要触发 TextChanged 事件并在 View Model 中处理它
我需要在 DataGridColumnHeader 上使用 Command 对数据进行排序。标准 DataGrid 排序功能对我来说还不够,因为 DataGrid 中并未显示所有数据。我的虚拟机中甚至
我正在尝试为我的 DataGrid 创建一个自定义 header ,以便能够以一种强大的方式进行过滤。一切都像我想要的那样工作,除了 UserControl 不随列拉伸(stretch)这一事实。我已
样式化 DataGrid,我想通过将触发器应用于 ControlTemplate 或 Style 来区分其最后一列标题。例如:
我遇到了一个场景,我必须动态创建数据网格列并且必须在 C# 代码中创建列。我在每个生成的列的单独代码区域中都有一个复选框。该复选框确定特定列是隐藏还是可见。该复选框绑定(bind)到 GameAttr
我是一名优秀的程序员,十分优秀!