У меня есть datagrid в моем программном обеспечении. На этом показан ряд результатов. Мы используем стили XAML для их форматирования с помощью стилей и триггеров данных для особого поведения.WPF: Как изменить свойства столбца datagrid, когда мышь находится над заголовком столбца?
Моя цель: когда я перехожу через заголовок столбца, я хочу, чтобы ячейка заголовка и все ячейки столбца получили границу справа (или тот же фоновый цвет в порядке).
Как я могу получить этот результат?
На данный момент, со следующим стилем, я получаю курсор работает над заголовком:
<Style x:Key="DataGridColumnHeaderGroups" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="FontFamily" Value="{StaticResource SourceSansPro-Bold}" />
<Setter Property="Height" Value="35" />
<Setter Property="Background" Value="{StaticResource White}" />
<Setter Property="SeparatorBrush" Value="{StaticResource Gray}" />
<Setter Property="SeparatorVisibility" Value="Visible" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid x:Name="topGrid">
<themes:DataGridHeaderBorder Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
IsClickable="{TemplateBinding CanUserSort}"
IsHovered="{TemplateBinding IsMouseOver}"
IsPressed="{TemplateBinding IsPressed}"
Padding="{TemplateBinding Padding}"
SeparatorBrush="{TemplateBinding SeparatorBrush}"
SeparatorVisibility="{TemplateBinding SeparatorVisibility}"
SortDirection="{TemplateBinding SortDirection}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<Path x:Name="SortArrow"
Grid.Column="1"
Width="8"
Height="6"
Margin="2,0,5,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Data="M0,0 L1,0 0.5,1 z"
Fill="Black"
Opacity="0.5"
RenderTransformOrigin="0.5,0.4"
Stretch="Fill"
Visibility="Collapsed" />
</Grid>
</themes:DataGridHeaderBorder>
<Thumb x:Name="PART_LeftHeaderGripper"
HorizontalAlignment="Left"
Style="{StaticResource ColumnHeaderGripperStyle}" />
<Thumb x:Name="PART_RightHeaderGripper"
HorizontalAlignment="Right"
Style="{StaticResource ColumnHeaderGripperStyle}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="SortDirection" Value="Ascending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
<Setter TargetName="SortArrow" Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="180" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="SortDirection" Value="Descending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Background" Value="GreenYellow" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я также следующий стиль для клеток, но они действуют по строкам, а не столбец как Я хотел бы иметь:
<Style x:Key="DataGridCellGroups" TargetType="{x:Type DataGridCell}">
<Setter Property="MinHeight" Value="35" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Padding" Value="7" />
<Setter Property="BorderThickness" Value="0 0 3 0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="True">
<ContentPresenter Margin="5,8,10,8"
VerticalAlignment="Top"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource Grid Selected Row}" />
<Setter Property="Foreground" Value="{StaticResource Gray Darker}" />
</Trigger>
</Style.Triggers>
</Style>
Как я могу установить фон колонки, со стилями, когда IsMousover = true
в заголовке?
EDIT: У нас есть следующие ограничения: Работа со стилем, распространение фонового рисунка мыши для всех ячеек столбцов, когда мышь над заголовком столбца.
HI, У нас есть различные стили на другом столбце и работать со стилями, как у нас есть много таких сеток. Мы предусмотрели пользовательский контроль, но для нас это слишком завышено. Поэтому мы стараемся работать со Стили. Кроме того, ваше решение для обработки события в заголовке в порядке, но мы его уже получили и не распространяем фон/границу на все ячейки столбца – DRK
привет, как установить источник itemsdatagrid? – Ron