Style样式

最重要的两个元素 :setter  Trigger

 Style中的Setter

setter是用来设置属性值的

<Style TargetType="{x:Type TextBox}">

<Setter Property="BorderThickness" Value="1"/>

<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>

<Setter Property="HorizontalContentAlignment" Value="Left"/>

<Setter Property="FocusVisualStyle" Value="{x:Null}"/>

<Setter Property="AllowDrop" Value="true"/>

<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>

<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>

</Style>

上面的样式是应用 于所有textbox,若某个不想使用,则可以使用

<TextBox x:Name="textBox"  Style="{x:Null}"/>

设置ControlTemplate

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="{x:Type TextBox}">

<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">

<ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>

</Border>

<ControlTemplate.Triggers>

<Trigger Property="IsEnabled" Value="false">

<Setter Property="Opacity" TargetName="border" Value="0.56"/>

</Trigger>

<Trigger Property="IsMouseOver" Value="true">

<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>

</Trigger>

<Trigger Property="IsKeyboardFocused" Value="true">

<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>

</Trigger>

</ControlTemplate.Triggers>

</ControlTemplate>

</Setter.Value>

</Setter>

 Style中的Trigger

当控件的某些属性的值一但符合某些条件就会触发该 触发器。

如当checkbox选中时字体加大和变颜色

<Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}">

<Style.Triggers>

<Trigger Property="IsChecked" Value="true">

<Trigger.Setters>

<Setter Property="FontSize" Value="24"></Setter>

<Setter Property="Foreground"  Value="Red"></Setter>

</Trigger.Setters>

</Trigger>

</Style.Triggers>

</Style>

当需要多个条件都满足时

<Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}">

<Style.Triggers>

<MultiTrigger>

<MultiTrigger.Conditions>

<Condition Property="IsChecked" Value="true"></Condition>

<Condition Property="Content" Value="123"></Condition>

</MultiTrigger.Conditions>

<MultiTrigger.Setters>

<Setter Property="FontSize" Value="24"></Setter>

<Setter Property="Foreground"  Value="Red"></Setter>

</MultiTrigger.Setters>

</MultiTrigger>

</Style.Triggers>

</Style>

由数据触发的DataTrigger.

当自身的输入长度为7时改变大小和颜色

<local:LenConvert  x:Key="lc"></local:LenConvert>

<Style  TargetType="{x:Type TextBox}">

<Style.Triggers>

<DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.Self},Path=Text.Length,Converter={StaticResource lc}}" Value="true">

<Setter Property="FontSize" Value="24"></Setter>

<Setter Property="Foreground" Value="red"></Setter>

</DataTrigger>

</Style.Triggers>

</Style>

public class LenConvert : IValueConverter

{

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

{

var len = (int)value;

return len==7;

}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

{

throw new NotImplementedException();

}

}

多个数据条件觖发MultiDataTrigger

<Application.Resources>

<local:LenConvert  x:Key="lc"></local:LenConvert>

<local:Student  x:Key="st" Name="gc" Age="110"></local:Student>

<Style  TargetType="{x:Type TextBox}">

<Style.Triggers>

<MultiDataTrigger>

<MultiDataTrigger.Conditions>

   <Condition Binding="{Binding Age}" Value="110"></Condition>

                        <Condition Binding="{Binding Name}" Value="gc"></Condition>

</MultiDataTrigger.Conditions>

<MultiDataTrigger.Setters>

<Setter Property="FontSize" Value="24"></Setter>

</MultiDataTrigger.Setters>

</MultiDataTrigger>

</Style.Triggers>

</Style>

</Application.Resources>

<TextBox x:Name="textBox" DataContext="{StaticResource st}"   />

由事件触发的EventTrigger

不是由属性或数据变化触发的,被触发后也并非应用一组Setter,而是执行一段动画,UI的动画效果往往与EventTrigger相关。

如下例子鼠标移动到按钮上面就变化,移走就变正常

<Style  TargetType="{x:Type Button}">

<Style.Triggers>

<EventTrigger RoutedEvent="MouseEnter">

<!--鼠标在上面事件-->

<BeginStoryboard>

<Storyboard>

<DoubleAnimation To="150" Duration="0:0:0.2" Storyboard.TargetProperty="Width"></DoubleAnimation>

<DoubleAnimation To="50" Duration="0:0:0.2" Storyboard.TargetProperty="Height"></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

<EventTrigger RoutedEvent="MouseLeave">

<!--鼠标移走事件-->

<BeginStoryboard>

<Storyboard>

<DoubleAnimation   Duration="0:0:0.2" Storyboard.TargetProperty="Width"></DoubleAnimation>

<DoubleAnimation   Duration="0:0:0.2" Storyboard.TargetProperty="Height"></DoubleAnimation>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Style.Triggers>

</Style>

<Button x:Name="button" Content="Button"   Width="40" Height="60" />

button必须初如width和height,显式写出来,否则会报异常

时间: 2024-10-18 06:34:37

Style样式的相关文章

DOM Style样式对象的详细用法

DOM Style样式对象的详细用法 HTML Style样式比较复杂,相应访问.修改方法也有所差异.参考相关资料,整理如下. 典型Html文件如下,有三种定义方式. <head>     <style type="text/css">                /* 内部样式 */       h3 {color:green;}     </style>             <!-- 外部样式 style.css -->    

JS学习之动态加载script和style样式

前提:我们可以把一个网页里面的内容理解为一个XML或者说网页本身也就是一个XML文档,XML文档都有很特殊的象征:"标签"也叫"节点".我们都知道一个基本的网页格式是 <!DOCTYPE /> <head></head> <body><body /> 这些是最基本的形态,但是其实它省略了最外面的一个标签<document>. <document> <!DOCTYPE />

Android 基础一 TextView,Style样式,Activity 传值,选择CheckBox 显示密码

1.修改TextView字体 mTextView = (TextView) findViewById(R.id.textview1); mTextView.setText("I am here"); Resources resources = getBaseContext().getResources(); Drawable myDrawable = resources.getDrawable(R.drawable.Drawable1); mTextView.setBackground

Vue 设置style样式

1.直接添加行内样式 2.通过绑定设置style样式 3.将vue的属性设置为样式 4将多个vue属性设置为样式 <div id="box"> <!--直接添加样式--> <p style="background-color: blue;">sssss</p> <!--绑定样式--> <p v-bind:style="'background-color: red;'">sss

网页边框样式与style样式部分总结

1).border边框样式:border-style:solid 边框样式值如下: none : 无边框.与任何指定的border-width值无关 hidden : 隐藏边框.IE不支持 dotted : 在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为点线.否则为实线(常用) dashed : 在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为虚线.否则为实线(常用) solid : 实线边框(常用) double : 双线边框.两条单线与其间隔的和等于

js控制style样式

1.行内样式获取打印出来 2.内嵌和外链的获取不了 <div style="width:200px;height:200px; background: red;"></div> var box=document.getElementsByTagName("div")[0]; console.log( box.style.width) 3.style属性是对象(数组对象) 4.可以索引值取值 console.log(box.style[0]);

JS-DOM ~ 03. 子节点的操作、style.样式和属性、dom元素的创建方法及操作、14个例题、主要是利用js直接控制html属性

带有Element和不带的区别 a)  带Element的获取的是元素节点 b)  不带可能获取文本节点和属性节点 获取所以子节点 a)   . childNodes b)   . children c)   . parentNode . children [索引] . children:获取所有子节点 opacity:0-1:透明度 alpha(opacity:百分数):IE6/7/8透明度 先绑定事件再进行循环 previousNode()上一个兄弟节点 alert(变量名)可测试变量名是否

javascript操作class和style样式

1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>无标题文档</title> 6 <style> 7 .fontSize22 8 { 9 font-size:22px; 10 } 11 .fontWeight 12 { 13 font-weight:bold; 14 } 15 </style> 16 &

自定义弹窗Style样式

由于系统默认alert弹出窗口不能自定义样式,有可能不符合网站的风格,虽然网上应该有很多这样的JS 但是还是自己写的比较放心,顺便练习一下对DOM的操作 支持IE6下的SELECT不能遮罩的问题,谷歌支持圆角,IE6下就比较丑了,四四方方的,不过可以自定义自己喜欢的样式 听取建议后,修改了position:fixed, IE6下用hack处理了. 点击看效果: 点击模拟Alert弹出框 点击模拟Alert弹出框 点击模拟Alert弹出框 所需CSS: <style type="text/c