[英]How to outline the selected row with transparent selection color in WPF DataGrid?
看起來像這樣的東西:
我不想在選擇時更改背景或前景色,只勾勒出選定的行。
這在 WPF 中是否可行? 我只在 SO 上看到 Winforms。
好的,所以我將它添加到我現有的資源中,所以現在我的 XAML 代碼的資源是這樣的:
<Window.Resources>
<local:NullImageConverter x:Key="nullImageConverter"/>
<Style x:Key="DataGridColumnSeparatorStyle" TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Rectangle VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="#1e90ff"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DataGridColumnAlarmStyle" TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Rectangle VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="#000000"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="RowStyleWithAlternation" TargetType="DataGridRow">
<Setter Property="Background" Value="#141414"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="Normal"/>
<Style.Triggers>
<Trigger Property="AlternationIndex" Value="1">
<Setter Property="Background" Value="#1e1e1e"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="#1e90ff" />
<Setter Property="BorderThickness" Value="1" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="TextBlock.TextAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Stretch"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="BorderThickness" Value="0"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value=" "/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Symbol"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="11"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
<Setter Property="DataGridCell.Foreground" Value="{Binding Path=Balance.ProfitColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="12"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
<Setter Property="DataGridCell.Foreground" Value="{Binding Path=Balance.ProfitColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="13"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Background" Value="{Binding Path=PriceChangeDailyBackColor}" />
<Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeDailyForeColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="14"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Background" Value="{Binding Path=PriceChangeHourlyBackColor}" />
<Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeHourlyForeColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Min %"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeMinutelyForeColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Net BTC/m"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="DataGridCell.Background" Value="{Binding Path=LastMinuteVolumeColor}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{x:Null}"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
<Style TargetType="{x:Type ProgressBar}">
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Border BorderThickness="1" Background="#006400" CornerRadius="0" Padding="0">
<Grid x:Name="PART_Track">
<Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left" Fill="#640000" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<CollectionViewSource Source="{Binding Coins}" IsLiveSortingRequested="True" x:Key="MyKey" />
</Window.Resources>
所以它仍然使用由交替的 colors 設置的背景顏色,並且分隔樣式列仍然顯示,不確定是否有辦法解決這些問題。
您已修改DataGridRow
樣式。 當IsSelected
為 true 並設置BorderBrush
和BorderThickness
時添加觸發器。
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="1" />
</Trigger>
</Style.Triggers>
</Style>
然后修改DataGridCell
樣式。 當IsSelected
為 true 時添加觸發器,並將Background
和BorderBrush
設置為Null
。 還要設置Foreground
,否則當你 select 一行時, Foreground
會改變。
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="Black"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{x:Null}"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
</Trigger>
</Style.Triggers>
</Style>
您可以為 DataGridRow 編寫樣式。 像這樣的東西。 您可以將此樣式添加到 App.xaml 或 window 中的資源中您想要的任何位置。
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="BorderBrush" Value="LightGray" />
<Setter Property="BorderThickness" Value="1" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="2" />
</Trigger>
</Style.Triggers>
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
</Style.Resources>
</Style>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.