如何更改WPF控件模板

时间:2011-06-03 22:22:20

标签: .net wpf templates controls

此问题的后续问题:How do you hide a WPF DocumentViewer's menu bars?

我是WPF的新手,不知道从哪里开始进行控件模板定制。 MSDN似乎没有太大帮助。

我只需要隐藏主DocumentViewer工具栏,但是当我尝试自定义XAML文件时,它无法编译。什么是自定义步骤?

1 个答案:

答案 0 :(得分:2)

在WPF中,控件模板用于使用一组元素“设计”控件,这些元素组成了外观和控件的行为。您不必知道开始使用控件模板。自定义控件模板的步骤如下:

  1. 使用MSDN,ShowMeTheTemplate,Expression Blend或主题文件找到ElementName(包括控件模板)的默认样式
  2. 将默认样式复制到应用程序的资源中,通常位于App.xaml或元素的资源中,例如WindowGrid
  3. 将密钥从x:Key="{x:Type ElementName}"更改为x:Key="myStyleName"
  4. 修改控件模板以添加,删除或更改默认值中的元素和属性
  5. 通过添加属性ElementName
  6. ,在Style="{StaticResource myStyleName}"的实例上使用该样式

    让我们这样做。来自MSDN的DocumentViewer的默认样式Here's。我们看到一个以<ToolBar ...>开头的重要部分,因此我们将删除所有内容。然后,如果你按照其余步骤进行操作,你最终会得到XAML:

    <Grid>
        <Grid.Resources>
            <Style x:Key="documentViewerNoToolbarStyle"
                TargetType="{x:Type DocumentViewer}">
                <Setter Property="Foreground"
                    Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
                <Setter Property="Background"
                    Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
                <Setter Property="FocusVisualStyle"
                    Value="{x:Null}" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DocumentViewer}">
                            <Border BorderThickness="{TemplateBinding BorderThickness}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                Focusable="False">
                                <Grid KeyboardNavigation.TabNavigation="Local">
                                    <Grid.Background>
                                        <SolidColorBrush Color="{DynamicResource ControlLightColor}" />
                                    </Grid.Background>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="*" />
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>
    
                                    <ScrollViewer Grid.Row="1"
                                        CanContentScroll="true"
                                        HorizontalScrollBarVisibility="Auto"
                                        x:Name="PART_ContentHost"
                                        IsTabStop="true">
                                        <ScrollViewer.Background>
                                            <LinearGradientBrush EndPoint="0.5,1"
                                                StartPoint="0.5,0">
                                                <GradientStop Color="{DynamicResource ControlLightColor}"
                                                    Offset="0" />
                                                <GradientStop Color="{DynamicResource ControlMediumColor}"
                                                    Offset="1" />
                                            </LinearGradientBrush>
                                        </ScrollViewer.Background>
                                    </ScrollViewer>
    
                                    <ContentControl Grid.Row="2"
                                        x:Name="PART_FindToolBarHost"/>
                                </Grid>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Grid.Resources>
        <DocumentViewer Style="{StaticResource documentViewerNoToolbarStyle}"/>
    </Grid>