zoukankan      html  css  js  c++  java
  • C#编程之WPF控件开发(十一)

    继上一篇文章提到的,这里我们讲一下如何如何满足一些用户变态要求,将控件形状改变,并且我们顺手给他来个背景色触发变化。

    我们知道从控件类继承的类具有控件模板(ControlTemplate),它用于定义控件(Control)的结构和外观。控件的模板属性是公共的,因此我们可以为控件指定非默认控件模板。通常我们将控件指定新的控件模板以自定义控件的外观.同样,我们还是以上一章节的代码为例:

    完整代码如下:

     1 <Window x:Class="WpfControls.MainWindow"
     2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     4         Title="MainWindow" Height="350" Width="525">
     5     <Window.Resources>
     6         <Style TargetType="Button">
     7             <Setter Property="Template">
     8                 <Setter.Value>
     9                     <ControlTemplate TargetType="Button">
    10                         <Border x:Name="Border" CornerRadius="20" BorderBrush="PaleGreen" BorderThickness=" 1">
    11                             <Border.Background>
    12                                 <LinearGradientBrush StartPoint=" 0,0.5" EndPoint=" 1,0.5" Opacity=" 0.5">
    13                                     <GradientStop Color="Green" Offset=" 0.0"/>
    14                                     <GradientStop Color="White" Offset=" 1.0"/>
    15                                 </LinearGradientBrush>
    16                             </Border.Background>
    17                             <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
    18                         </Border>
    19                         <ControlTemplate.Triggers>
    20                             <Trigger Property="IsPressed" Value="true">
    21                                 <Setter TargetName="Border" Property="Background">
    22                                     <Setter.Value>
    23                                         <LinearGradientBrush StartPoint=" 0,0.5" EndPoint="1,0.5">
    24                                             <GradientStop Color="Green" Offset="0.0"/>
    25                                             <GradientStop Color="Red" Offset="0.5"/>
    26                                         </LinearGradientBrush>
    27                                     </Setter.Value>
    28                                 </Setter>
    29                             </Trigger>
    30                         </ControlTemplate.Triggers>
    31                     </ControlTemplate>
    32                 </Setter.Value>
    33             </Setter>
    34         </Style>
    35     </Window.Resources>
    36     <Grid>
    37         <Grid.Background>
    38             <LinearGradientBrush StartPoint="0,1.5" EndPoint="0.5,0.1" Opacity="0.2">
    39                 <LinearGradientBrush.GradientStops>
    40                     <GradientStop Color="Green" Offset="0.0"/>
    41                     <GradientStop Color="LightBlue" Offset="0.75"/>
    42                     <GradientStop Color="LightCoral" Offset="1.2"/>
    43                 </LinearGradientBrush.GradientStops>
    44             </LinearGradientBrush>
    45         </Grid.Background>
    46         <Grid.RowDefinitions>
    47             <RowDefinition Height="30"/>
    48             <RowDefinition Height="30"/>
    49             <RowDefinition Height="30"/>
    50         </Grid.RowDefinitions>
    51         <Grid.ColumnDefinitions>
    52             <ColumnDefinition/>
    53             <ColumnDefinition/>
    54         </Grid.ColumnDefinitions>
    55         <Label Grid.Column="0" FontSize="14" FontWeight="Bold">Entry your First Name:</Label>
    56         <TextBox Grid.Row="0" Grid.Column="1" Name="firstName" Margin="0,5,10,5"/>
    57         <Label Grid.Row="1">Entry your Last Name:</Label>
    58         <TextBox Grid.Column="1" Grid.Row="1" Name="lastName" Margin="0,5,10,5"/>
    59         <Button Grid.Row="2" Grid.Column="0" Name="submit" Margin="2" >View message</Button>
    60         <Button Grid.Row="2" Grid.Column="2" Name="Clear" Margin="2">Clear Name</Button>
    61     </Grid>
    62 </Window>
    View Code

    编译运行效果:

    按下按键

    首先我们同样是在windows框架上定义我们的style(样式) Window.Resources ,选择控件类型为按键控件 <Style TargetType="Button"> 紧接着设置属性模板 <Setter Property="Template"> 这里运用Border来设置边框属性外观默认参数:

                           <Border x:Name="Border" CornerRadius="20" BorderBrush="PaleGreen" BorderThickness=" 1">
                                <Border.Background>
                                    <LinearGradientBrush StartPoint=" 0,0.5" EndPoint=" 1,0.5" Opacity=" 0.5">
                                        <GradientStop Color="Green" Offset=" 0.0"/>
                                        <GradientStop Color="White" Offset=" 1.0"/>
                                    </LinearGradientBrush>
                                </Border.Background>
                                <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
                            </Border>

    接着定义一触发点,触发为判断是否按下按钮(IsPressed)

                          <ControlTemplate.Triggers>
                                <Trigger Property="IsPressed" Value="true">
                                    <Setter TargetName="Border" Property="Background">
                                        <Setter.Value>
                                            <LinearGradientBrush StartPoint=" 0,0.5" EndPoint="1,0.5">
                                                <GradientStop Color="Green" Offset="0.0"/>
                                                <GradientStop Color="Red" Offset="0.5"/>
                                            </LinearGradientBrush>
                                        </Setter.Value>
                                    </Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>

    所以整体来讲,主要是设置这两个内容属性值。

    接下来,如果客户觉得,只是改变形状与外观,然而并没有什么卵用。因为没有实际意义上的动作,比如按下按键,需要实现编辑框内数据按一定算法进行运算,或者打印字符到相应的编辑框中。好吧,作为苦逼程序猿也只有默默加班了。我们将在下一章讲解如何添加事件处理---订阅事件。

    End.

    谢谢.

  • 相关阅读:
    sql 语句系列(加减乘除与平均)[八百章之第十四章]
    并发系列64章(并发概要)第一章
    redis 一百二十篇(简单介绍)之第一篇
    sql 语句系列(分割ip)[八百章之第十四章]
    sql 语句系列(字符串之裂开)[八百章之第十三章]
    sql 语句系列(字符串之父与子之间)[八百章之第十二章]
    sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]
    sql 语句系列(用魔法打败魔法)[八百章之第十章]
    sql 语句系列(列举非索引外键)[八百章之第九章]
    sql 语句系列(列举系列)[八百章之第八章]
  • 原文地址:https://www.cnblogs.com/lumao1122-Milolu/p/11905910.html
Copyright © 2011-2022 走看看