代码之家  ›  专栏  ›  技术社区  ›  Greg

是否可以引用在microsoft程序集中定义的控件模板?

  •  2
  • Greg  · 技术社区  · 16 年前

    我有一个场景,其中我必须为几个WPF控件提供自己的控件模板,即GridViewHeader。当您在blend中查看GridViewHEader的控件模板时,它是由其他几个控件生成的,在某些情况下,这些控件仅为该控件设置样式,即列之间的拆分器。 所以,我的问题是-有没有一种方法可以引用那些预定义的模板?到目前为止,我的资源中已经有了自己的副本,但我不喜欢这种方法。

    以下是示例场景: 我有一个GridViewColumnHeader:

            <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="gridViewColumnStyle">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Setter Property="VerticalContentAlignment" Value="Stretch"/>
                <Setter Property="Background" Value="{StaticResource GridViewHeaderBackgroundColor}"/>
                <Setter Property="BorderBrush" Value="{StaticResource GridViewHeaderForegroundColor}"/>
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="Padding" Value="2,0,2,0"/>
                <Setter Property="Foreground" Value="{StaticResource GridViewHeaderForegroundColor}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                            <Grid SnapsToDevicePixels="true" Tag="Header" Name="Header">
                                <ContentPresenter Name="HeaderContent" Margin="0,0,0,1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                <Canvas>
                                    <Thumb x:Name="PART_HeaderGripper" Style="{StaticResource GridViewColumnHeaderGripper}"/>
                                </Canvas>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="true">
                                </Trigger>
                                <Trigger Property="IsPressed" Value="true">
                                    <Setter TargetName="HeaderContent" Property="Margin" Value="1,1,0,0"/>
                                </Trigger>
                                <Trigger Property="Height" Value="Auto">
                                    <Setter Property="MinHeight" Value="20"/>
                                </Trigger>
                                <Trigger Property="IsEnabled" Value="false">
                                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    

    here :

    Thumb的主题如下:

    <Style x:Key="GridViewColumnHeaderGripper"
           TargetType="{x:Type Thumb}">
        <Setter Property="Canvas.Right"
                Value="-9"/>
        <Setter Property="Width"
                Value="18"/>
        <Setter Property="Height"
                Value="{Binding Path=ActualHeight,RelativeSource={RelativeSource TemplatedParent}}"/>
        <Setter Property="Padding"
                Value="0"/>
        <Setter Property="Background"
                Value="{StaticResource GridViewColumnHeaderBorderBackground}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Thumb}">
                    <Border Padding="{TemplateBinding Padding}"
                            Background="Transparent">
                        <Rectangle HorizontalAlignment="Center"
                                   Width="1"
                                   Fill="{TemplateBinding Background}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    到目前为止,我必须复制和粘贴该样式,而我更喜欢从参考资料中获取对它的引用。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Ana Betts    16 年前

    引用100%可能发生更改的内部资源是不可用的—最好只是复制它。

        2
  •  0
  •   VolkerK    16 年前