2010-09-02 2 views
0

J'ai un petit problème avec WPF. Voici mon style dans lequel j'ai créé un modèle pour l'en-tête de colonne DataGrid.Apparence différente en mode design et en exécution

<Window.Resources> 
    <Style x:Key="DataGridColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}"> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Template"> 
<Setter.Value> 
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
    <Grid> 
    <Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}"> 
    <Microsoft_Windows_Themes:DataGridHeaderBorder.Background> 
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
     <GradientStop Color="#FF7EE4FF" Offset="0"/> 
     <GradientStop Color="#FF66D6F3" Offset="1"/> 
     <GradientStop Color="#FF0097BE" Offset="0.5"/> 
    </LinearGradientBrush> 
    </Microsoft_Windows_Themes:DataGridHeaderBorder.Background> 
    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
    </Microsoft_Windows_Themes:DataGridHeaderBorder> 
    </Grid> 
</ControlTemplate> 
</Setter.Value> 

Voilà mon avis DataGrid contrôle Grille:

<DataGrid Margin="46.667,41.333,102,87"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Status" Width="*" HeaderStyle=" {DynamicResource  DataGridColumnHeaderStyle1}"/> 
    </DataGrid.Columns> 
</DataGrid> 

Le problème est que je peux voir en-tête modifié dans le concepteur VS, ou en mélange, mais quand je lance mon application le style d'en-tête est par défaut. Quelqu'un peut-il aider? Merci d'avance.

EDIT

Juste trouvé chose intéressante. Quand je mets en style

DataGridTemplateColumn.HeaderStyle

il travaille

 <DataGrid Margin="46.667,41.333,102,87"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Status" Width="*"> 
       <DataGridTemplateColumn.HeaderStyle> 
        <Style TargetType="{x:Type DataGridColumnHeader}"> 
         <Setter Property="VerticalContentAlignment" Value="Center"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
            <Grid> 
             <Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}"> 
              <Microsoft_Windows_Themes:DataGridHeaderBorder.Background> 
               <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
                <GradientStop Color="#FF7EE4FF" Offset="0"/> 
                <GradientStop Color="#FF66D6F3" Offset="1"/> 
                <GradientStop Color="#FF0097BE" Offset="0.5"/> 
               </LinearGradientBrush> 
              </Microsoft_Windows_Themes:DataGridHeaderBorder.Background> 
              <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
             </Microsoft_Windows_Themes:DataGridHeaderBorder> 
            </Grid> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </DataGridTemplateColumn.HeaderStyle> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

Pourquoi faut-il faire une différence?

Répondre

1

Il semble que DynamicResource ne se résout pas correctement au moment de l'exécution. Essayez de changer votre DynamicResource à un StaticResource comme ceci:

<DataGridTemplateColumn Header="Status" Width="*" 
    HeaderStyle="{StaticResource DataGridColumnHeaderStyle1}"/> 

Pour plus de détails sur les différences entre DynamicResource et StaticResource, voir cette autre question StackOverflow: What's the difference between StaticResource and DynamicResource in WPF?

+0

homme Merci. Cela fonctionne maintenant – pavel

+0

De rien. :) –

Questions connexes