【问题标题】:Different look in design-mode and at runtime设计模式和运行时的不同外观
【发布时间】:2010-09-02 20:05:59
【问题描述】:

我对 WPF 有一个小问题。 这是我为 DataGrid 列标题创建模板的样式。

<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>

这是我在 Grid 中的 DataGrid 视图控件:

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

问题是我可以在 VS 设计器或 Blend 中看到修改后的标题,但是当我运行我的应用程序时,标题样式是默认的。任何人都可以帮忙吗?提前致谢。

编辑

刚刚发现有趣的事情。当我把 Style 放入

DataGridTemplateColumn.HeaderStyle

它正在工作

       <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>

为什么会有所不同?

【问题讨论】:

    标签: wpf


    【解决方案1】:

    看起来 DynamicResource 在运行时没有正确解析。尝试将您的 DynamicResource 切换为 StaticResource,如下所示:

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

    有关 DynamicResource 和 StaticResource 之间差异的更多详细信息,请参阅另一个 StackOverflow 问题:What's the difference between StaticResource and DynamicResource in WPF?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多