• 模板之在使用模板绑定时,利用样式提供默认值


    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ControlTemplates.GradientButton"
        >
    
        <!-- Resources used by the template. -->
        <RadialGradientBrush RadiusX="1" RadiusY="5" GradientOrigin="0.5,0.3"
         x:Key="HighlightBackground">
          <GradientStop Color="White" Offset="0" />
          <GradientStop Color="Blue" Offset=".4" />
        </RadialGradientBrush>
    
        <RadialGradientBrush RadiusX="1" RadiusY="5" GradientOrigin="0.5,0.3"
         x:Key="PressedBackground">
          <GradientStop Color="White" Offset="0" />
          <GradientStop Color="Blue" Offset="1" />
        </RadialGradientBrush>
    
        <SolidColorBrush Color="Blue" x:Key="DefaultBackground"></SolidColorBrush>
        <SolidColorBrush Color="Gray" x:Key="DisabledBackground"></SolidColorBrush>
    
        <RadialGradientBrush RadiusX="1" RadiusY="5" GradientOrigin="0.5,0.3"
         x:Key="Border">
          <GradientStop Color="White" Offset="0" />
          <GradientStop Color="Blue" Offset="1" />
        </RadialGradientBrush>
    
        <!-- The button control template. -->
        <ControlTemplate x:Key="GradientButtonTemplate" TargetType="{x:Type Button}">
          <Border Name="Border" BorderBrush="{StaticResource Border}" BorderThickness="2"
           CornerRadius="2" Background="{TemplateBinding Background}"
           TextBlock.Foreground="White">
            <Grid>
              <Rectangle Name="FocusCue" Visibility="Hidden" Stroke="Black"
               StrokeThickness="1" StrokeDashArray="1 2" SnapsToDevicePixels="True">
              </Rectangle>
              <ContentPresenter Margin="{TemplateBinding Padding}"
               RecognizesAccessKey="True"></ContentPresenter>
            </Grid>
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter TargetName="Border" Property="Background"
               Value="{StaticResource HighlightBackground}" />
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
              <Setter TargetName="Border" Property="Background"
               Value="{StaticResource PressedBackground}" />
            </Trigger>
            <Trigger Property="IsKeyboardFocused" Value="True">
              <Setter TargetName="FocusCue" Property="Visibility"
                Value="Visible"></Setter>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
              <Setter TargetName="Border" Property="Background"
               Value="{StaticResource DisabledBackground}"></Setter>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
    
        <!-- The style that applies the button control template. -->
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background"
                    Value="{StaticResource DefaultBackground}"></Setter>
          <Setter Property="Control.Template"
           Value="{StaticResource GradientButtonTemplate}"></Setter>
        </Style>
      </ResourceDictionary>

    在模板中使用模板绑定,在样式中设置属性,给background设置一个默认值。

    当然控件本身通过模板绑定可以修改这个属性值。

  • 相关阅读:
    IELTS Writing Task 2: 'music' essay
    leetcode 368. 最大整除子集
    820复试算法 快排找第 k 小
    ASP.NET后台生成随机验证码
    Oracle身份证验证方法
    ASP.NET 存储过程导入(oracle)返回导入成功数和导入失败数
    C#执行参数为游标 返回一个记录集的Oracle存储过程
    C#执行带参数的Oracle存储过程
    往ORACLE数据库中插入XML数据
    存储过程 将数据插入到临时表,再根据条件判断 插入到不同的表
  • 原文地址:https://www.cnblogs.com/yingzilovexiaoxiong/p/14369834.html
Copyright © 2020-2023  润新知