Можно ли ссылаться на шаблоны управления, определенные в сборках Microsoft? - PullRequest
2 голосов
/ 16 сентября 2008

у меня есть сценарий, в котором я должен предоставить свой собственный шаблон элемента управления для нескольких элементов управления WPF - то есть GridViewHeader. когда вы смотрите на шаблон элемента управления для GridViewHEader в blend, он агрегируется с несколькими другими элементами управления, которые в некоторых случаях стилизованы только для этого элемента управления, то есть с этим разделителем между столбцами. Эти шаблоны, очевидно, являются ресурсами, скрытыми где-то в системе ... 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>

пока - ничего интересного, но, скажем, я хочу добавить некоторые дополнительные функции прямо в шаблоне - я бы оставил «ведущий» как есть, добавил свои элементы управления рядом с ним, и я хотел бы оставить Thumb со значениями по фреймворк. Я нашел темы, предоставленные Microsoft здесь :

тема для большого пальца выглядит так:

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

2 голосов
/ 16 сентября 2008

Ссылка на внутренние ресурсы, которые могут быть изменены на 100%, неработоспособна - лучше просто скопировать ее.

0 голосов
/ 16 сентября 2008

Можно ссылаться на них, но, как сказал Полбеттс, это не рекомендуется, поскольку они могут измениться. Также подумайте, действительно ли то, что вы делаете, «правильно». Можете ли вы отредактировать свой вопрос, чтобы объяснить, почему вам нужно сделать это именно так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...