2014-02-07 76 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