ControlTemplate 类
TOC
折叠目录
展开目录
本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

ControlTemplate 类

 

指定 Control 的可在其多个实例之间共享的可视结构和行为方面。

命名空间:   System.Windows.Controls
程序集:  PresentationFramework(PresentationFramework.dll 中)


[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
[DictionaryKeyPropertyAttribute("TargetType")]
public class ControlTemplate : FrameworkTemplate

名称说明
System_CAPS_pubmethodControlTemplate()

初始化 ControlTemplate 类的新实例。

System_CAPS_pubmethodControlTemplate(Type)

使用指定的目标类型初始化 ControlTemplate 类的新实例。

名称说明
System_CAPS_pubpropertyDispatcher

获取与此 DispatcherObject 关联的 Dispatcher(从 DispatcherObject 继承。)

System_CAPS_pubpropertyHasContent

获取一个值,该值指示此模板是否具有优化内容。(从 FrameworkTemplate 继承。)

System_CAPS_pubpropertyIsSealed

获取一个值,该值指示此对象是否处于不可变状态,如果处于该状态则无法更改对象。(从 FrameworkTemplate 继承。)

System_CAPS_pubpropertyResources

获取或设置可在此模板范围内使用的资源集合。(从 FrameworkTemplate 继承。)

System_CAPS_pubpropertyTargetType

获取或设置此 ControlTemplate 所针对的类型。

System_CAPS_pubpropertyTemplate

获取或设置一个引用,该引用指向当编写器定义或应用模板时用于录制或播放模板的 XAML 节点的对象。(从 FrameworkTemplate 继承。)

System_CAPS_pubpropertyTriggers

获取根据指定条件应用属性更改或执行操作的 TriggerBase 对象的集合。

System_CAPS_pubpropertyVisualTree

获取或设置模板的根节点。(从 FrameworkTemplate 继承。)

名称说明
System_CAPS_pubmethodCheckAccess()

确定调用线程是否可以访问此 DispatcherObject(从 DispatcherObject 继承。)

System_CAPS_pubmethodEquals(Object)

确定指定的对象是否等于当前对象。(从 Object 继承。)

System_CAPS_protmethodFinalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(从 Object 继承。)

System_CAPS_pubmethodFindName(String, FrameworkElement)

查找与在此模板中定义的指定名称相关联的元素。(从 FrameworkTemplate 继承。)

System_CAPS_pubmethodGetHashCode()

作为默认哈希函数。(从 Object 继承。)

System_CAPS_pubmethodGetType()

获取当前实例的 Type(从 Object 继承。)

System_CAPS_pubmethodLoadContent()

将模板的内容加载为对象的实例,并返回该内容的根元素。(从 FrameworkTemplate 继承。)

System_CAPS_protmethodMemberwiseClone()

创建当前 Object 的浅表副本。(从 Object 继承。)

System_CAPS_pubmethodRegisterName(String, Object)

将新的名称/对象对注册到当前名称范围内。(从 FrameworkTemplate 继承。)

System_CAPS_pubmethodSeal()

锁定模板,使其无法更改。(从 FrameworkTemplate 继承。)

System_CAPS_pubmethodShouldSerializeResources(XamlDesignerSerializationManager)

返回一个值,该值指示序列化过程是否应序列化此类的实例上的 Resources 属性值。(从 FrameworkTemplate 继承。)

System_CAPS_pubmethodShouldSerializeVisualTree()

返回一个值,该值指示序列化过程是否应序列化此类的实例上的 VisualTree 属性值。(从 FrameworkTemplate 继承。)

System_CAPS_pubmethodToString()

返回表示当前对象的字符串。(从 Object 继承。)

System_CAPS_pubmethodUnregisterName(String)

从 XAML 名称范围中移除名称/对象映射。(从 FrameworkTemplate 继承。)

System_CAPS_protmethodValidateTemplatedParent(FrameworkElement)

根据一组规则检查模板化父级。(替代 FrameworkTemplate.ValidateTemplatedParent(FrameworkElement)。)

System_CAPS_pubmethodVerifyAccess()

强制调用线程具有此 DispatcherObject 的访问权限。(从 DispatcherObject 继承。)

名称说明
System_CAPS_pubinterfaceSystem_CAPS_privmethodINameScope.FindName(String)

此 API 支持 产品 基础结构,不能在代码中直接使用。 返回一个具有提供的标识名称的对象。(从 FrameworkTemplate 继承。)

System_CAPS_pubinterfaceSystem_CAPS_privmethodIQueryAmbient.IsAmbientPropertyAvailable(String)

查询当前范围中是否有指定的环境属性。(从 FrameworkTemplate 继承。)

ControlTemplate 允许您指定控件的可视结构。控件作者可以定义默认的 ControlTemplate,而应用程序作者可以重写 ControlTemplate 以重新构建控件的可视结构。

控件模板化是 WPF 样式和模板化模型提供的众多功能中的一种。样式和模板化模型为您提供了很大的灵活性,在许多情况下,您都不需要编写自己的控件。如果您是希望更改控件的可视化或替换现有控件的 ControlTemplate 的应用程序作者,请参见 样式设置和模板化 主题来获取示例和深入讨论。

如果您要编写自己的控件,请参见Control Authoring Overview中的“创建自定义控件”。

ControlTemplate 旨在用作实现详细信息的独立单元,对于外部用户和对象(包括样式)不可见。仅可以从同一控件模板的内部操作此控件模板的内容。

<ControlTemplate>
  <VisualTreeRootNode>
VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

ControlTemplate

ControlTemplate 或派生类的对象元素。

VisualTreeRootNode

作为 ControlTemplate(或派生类)直接子级的一个 XAML 元素。模板必须具有一个根节点。为了生成有用的模板,选定作为 VisualTreeRootNode 的元素应支持它自己的内容模型,通常为支持多个子元素的模型。

VisualTreeNodeContents

完成预期模板的一个或多个元素。如果选定作为 VisualTreeRootNode 的元素仅支持一个子级,则只能有一个元素声明为 VisualTreeNodeContents如果所选 VisualTreeRootNode 支持文本内容属性,则它还可能(虽然并不常见)会提供文本内容。

下面显示了一个 ButtonStyle,它用于设置 ButtonControlTemplate

<Style TargetType="Button">
  <!--Set to true to not get any properties from the themes.-->
  <Setter Property="OverridesDefaultStyle" Value="True"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Ellipse Fill="{TemplateBinding Background}"/>
          <ContentPresenter HorizontalAlignment="Center"
                            VerticalAlignment="Center"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

在应用它后,Button 显示为 Ellipse

按钮 ControlTemplate 示例

在将 ControlTemplate 属性设置为新 ControlTemplate 时(如上面的示例所示),将替换整个模板。 Button 具有焦点或按下时的外观是将替换的按钮的默认外观的所有部分。因此,根据需要,您可能希望将按钮在按下时应有的外观等等纳入您的定义中,如下面的示例所示:

<Style TargetType="Button">
  <Setter Property="SnapsToDevicePixels"
          Value="true" />
  <Setter Property="OverridesDefaultStyle"
          Value="true" />
  <Setter Property="FocusVisualStyle"
          Value="{StaticResource ButtonFocusVisual}" />
  <Setter Property="MinHeight"
          Value="23" />
  <Setter Property="MinWidth"
          Value="75" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                x:Name="Border"
                CornerRadius="2"
                BorderThickness="1">
          <Border.BorderBrush>
            <LinearGradientBrush StartPoint="0,0"
                                 EndPoint="0,1">
              <LinearGradientBrush.GradientStops>
                <GradientStopCollection>
                  <GradientStop Color="{DynamicResource BorderLightColor}"
                                Offset="0.0" />
                  <GradientStop Color="{DynamicResource BorderDarkColor}"
                                Offset="1.0" />
                </GradientStopCollection>
              </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>

          </Border.BorderBrush>
          <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1"
                                 StartPoint="0.5,0">
              <GradientStop Color="{DynamicResource ControlLightColor}"
                            Offset="0" />
              <GradientStop Color="{DynamicResource ControlMediumColor}"
                            Offset="1" />
            </LinearGradientBrush>
          </Border.Background>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.5" />
                <VisualTransition GeneratedDuration="0"
                                  To="Pressed" />
              </VisualStateGroup.Transitions>
              <VisualState x:Name="Normal" />
              <VisualState x:Name="MouseOver">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlMouseOverColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Pressed">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlPressedColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[0].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderLightColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Disabled">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledControlDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames
                      Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledForegroundColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ContentPresenter Margin="2"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            RecognizesAccessKey="True" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsDefault"
                   Value="true">

            <Setter TargetName="Border"
                    Property="BorderBrush">
              <Setter.Value>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1">
                  <GradientBrush.GradientStops>
                    <GradientStopCollection>
                      <GradientStop Color="{DynamicResource DefaultBorderBrushLightBrush}"
                                    Offset="0.0" />
                      <GradientStop Color="{DynamicResource DefaultBorderBrushDarkColor}"
                                    Offset="1.0" />
                    </GradientStopCollection>
                  </GradientBrush.GradientStops>
                </LinearGradientBrush>

              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

请注意,此示例引用了此处未显示的资源。有关完整示例,请参见 Styling with ControlTemplates Sample(使用 ControlTemplates 设置样式的示例)。该示例提供了众多控件的控件模板示例,是创建控件模板的最佳入门方法。

.NET Framework
3.0 后可用
Silverlight
2.0 后可用
Windows Phone Silverlight
7.0 后可用

此类型的任何公共静态(Visual Basic 中为 Shared)成员都是线程安全的。但不保证所有实例成员都是线程安全的。

返回页首
显示:
© 2016 Microsoft