2014-02-07 5 views
1

Я ИЩУ изменить выбранный стиль строк в моем DataGrid от темно-синий и белый текст, который по умолчанию на самом деле зависит от существующего цвета переднего плана в строке, как это:WPF DataGridRow IsSelected Триггеры

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
    <Condition Property="Foreground" Value="Navy" /> 
    <Condition Property="IsSelected" Value="True" /> 
    </MultiDataTrigger.Conditions> 
    <MultiDataTrigger.Setters> 
    <Setter Property="Background" Value="LightSkyBlue" /> 
    </MultiDataTrigger.Setters> 
</MultiDataTrigger> 

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
    <Condition Property="Foreground" Value="Red" /> 
    <Condition Property="IsSelected" Value="True" /> 
    </MultiDataTrigger.Conditions> 
    <MultiDataTrigger.Setters> 
    <Setter Property="Background" Value="LightGoldenrodYellow" /> 
    </MultiDataTrigger.Setters> 
</MultiDataTrigger> 

Для других элементов управления я могу найти ControlTemplate, который содержит триггеры, которые задают выбранный стиль, но я не могу найти правильный шаблон для DataGridRow. Кто-нибудь знает, какой шаблон установлен?

ответ

2

Если вам необходимо изменить цвет фона для выбранной строки в DataGrid, вы должны достичь этого со стилем для DataGridCell.

<Style TargetType="{x:Type DataGridCell}"> 
     <Style.Triggers> 
      <Trigger Property="DataGridCell.IsSelected" 
        Value="True"> 
       <Setter Property="Background" 
         Value="LightGreen" /> 

       <Setter Property="Foreground" 
         Value="Black" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
+0

Это делает именно то, что мне нужно! Благодаря! – pquest

+0

Почему мы не можем просто использовать стиль для строки? Почему конкретно стиль ячейки? – ProfK

2

Следующий стиль DataGridRow, который я использую, чтобы избежать синего цвета по умолчанию - может быть, он обеспечивает ответ, который вы ищете?

В вашей DataGrid введите RowStyle свое соответствие этому стилю.

<Style x:Key="BetterHighlightedDataGridRowStyle" TargetType="sdk:DataGridRow"> 
    <Setter Property="IsTabStop" Value="False"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="sdk:DataGridRow"> 
       <sdk:DataGridFrozenGrid x:Name="Root"> 
        <sdk:DataGridFrozenGrid.Resources> 
         <Storyboard x:Key="DetailsVisibleTransition"> 
          <DoubleAnimation Duration="00:00:0.1" Storyboard.TargetProperty="ContentHeight" Storyboard.TargetName="DetailsPresenter"/> 
         </Storyboard> 
        </sdk:DataGridFrozenGrid.Resources> 
        <sdk:DataGridFrozenGrid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition/> 
        </sdk:DataGridFrozenGrid.ColumnDefinitions> 
        <sdk:DataGridFrozenGrid.RowDefinitions> 
         <RowDefinition/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
        </sdk:DataGridFrozenGrid.RowDefinitions> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
          <VisualState x:Name="NormalAlternatingRow"> 
           <Storyboard> 
            <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <DoubleAnimation Duration="0" To=".5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="NormalSelected"> 
           <Storyboard> 
            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
            <ColorAnimation Duration="0" To="#DDE9EE33" Storyboard.TargetProperty="(Fill).Color" Storyboard.TargetName="BackgroundRectangle"/> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="MouseOverSelected"> 
           <Storyboard> 
            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
            <ColorAnimation Duration="0" To="#E1C8C864" Storyboard.TargetProperty="(Fill).Color" Storyboard.TargetName="BackgroundRectangle"/> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="UnfocusedSelected"> 
           <Storyboard> 
            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
            <ColorAnimation Duration="0" To="#DDE9EE33" Storyboard.TargetProperty="(Fill).Color" Storyboard.TargetName="BackgroundRectangle"/> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="ValidationStates"> 
          <VisualState x:Name="Valid"/> 
          <VisualState x:Name="Invalid"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="BackgroundRectangle"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> 
            </ObjectAnimationUsingKeyFrames> 
            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="InvalidVisualElement"/> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Rectangle x:Name="BackgroundRectangle" Grid.ColumnSpan="2" Fill="#FFBADDE9" Opacity="0" Grid.RowSpan="2"/> 
        <Rectangle x:Name="InvalidVisualElement" Grid.ColumnSpan="2" Fill="#FFF7D8DB" Opacity="0" Grid.RowSpan="2"/> 
        <sdk:DataGridRowHeader x:Name="RowHeader" sdk:DataGridFrozenGrid.IsFrozen="True" Grid.RowSpan="3"/> 
        <sdk:DataGridCellsPresenter x:Name="CellsPresenter" Grid.Column="1" sdk:DataGridFrozenGrid.IsFrozen="True"/> 
        <sdk:DataGridDetailsPresenter x:Name="DetailsPresenter" Grid.Column="1" Grid.Row="1"/> 
        <Rectangle x:Name="BottomGridLine" Grid.ColumnSpan="2" Fill="Black" HorizontalAlignment="Stretch" Height="2" Grid.Row="2"/> 
       </sdk:DataGridFrozenGrid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

Хотя это работает, опция CellStyle намного проще – pquest

Смежные вопросы