首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计模式和运行时的不同外观

设计模式和运行时的不同外观
EN

Stack Overflow用户
提问于 2010-09-02 11:08:12
回答 1查看 1K关注 0票数 1

我对WPF有小问题。下面是我创建DataGrid列标题模板的样式。

代码语言:javascript
复制
<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>

下面是网格中的DataGrid视图控件:

代码语言:javascript
复制
<DataGrid Margin="46.667,41.333,102,87">
   <DataGrid.Columns>
       <DataGridTemplateColumn Header="Status" Width="*" HeaderStyle=" {DynamicResource     DataGridColumnHeaderStyle1}"/>
   </DataGrid.Columns>
</DataGrid>

问题是,我可以在VS designer中看到修改过的标头,或者在Blend中看到,但是当我运行我的应用程序头样式时是默认的。有人能帮忙吗?提前谢谢。

编辑

刚发现了有趣的东西。当我把风格放进去

DataGridTemplateColumn.HeaderStyle

起作用了

代码语言:javascript
复制
       <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>

为什么会有什么不同呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-02 12:00:19

看起来,DynamicResource在运行时没有正确地解决问题。尝试将DynamicResource切换到StaticResource,如下所示:

代码语言:javascript
复制
<DataGridTemplateColumn Header="Status" Width="*"
  HeaderStyle="{StaticResource DataGridColumnHeaderStyle1}"/>

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3626488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档