2

いくつかのWPFコントロール(つまり、GridViewHeader)用に独自のコントロールテンプレートを提供する必要があるシナリオがあります。GridViewHEaderのコントロールテンプレートをブレンドで見ると、他のいくつかのコントロールから集約されており、場合によっては、そのコントロール専用にスタイル設定されています。つまり、列間のこのスプリッターです。これらのテンプレートは、明らかにsystem ... dllのどこかに隠されているリソースです(またはテーマdllのどこかにあります)。だから、私の質問は-それらの事前定義されたテンプレートを参照する方法はありますか?これまでのところ、私は自分のリソースにそれらのコピーを持っていることになりましたが、私はそのアプローチが好きではありません。

これがサンプルシナリオです:私は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>

これまでのところ、興味深いことは何もありませんが、たとえば、テンプレートにいくつかの機能を直接追加したいのですが、cotnent presenterをそのままにし、その横にコントロールを追加し、Thumbをフレームワークのデフォルトのままにしておきたいと思います。私はここでマイクロソフトによって提供されたテーマを見つけました:

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>

これまでのところ、そのスタイルをコピーして貼り付ける必要がありますが、リソースから参照を取得したいと思います。

4

2 に答える 2

2

100%変更される可能性のある内部リソースを参照することは、サービス可能ではありません。単にコピーする方がよいでしょう。

于 2008-09-16T04:39:28.523 に答える
0

それらを参照することは可能ですが、ポールベッツが言ったように、変更される可能性があるためお勧めしません。また、あなたがしていることは本当に「正しい」かどうかを検討してください。質問を編集して、これを正確に行う必要がある理由を説明できますか?

于 2008-09-16T12:31:07.877 に答える