标签:Core CommonStates 状态 App VisualState 控件 Net WPF
目前.Net Core 3.1已经发布一段时间了, 对WPF的支持已经日渐完善。还记得当时微软在Github放出WPF源码时,.Net Core的版本应该是1.0吧,我以为WPF可以跨平台了,结果还是不支持跨平台。
在以后的博客示例程序中,我都会使用.Net Core来构建 WPF App,用法与.Net Framework基本一致。
以前在设置控件样式或自定义控件时,都是使用触发器来进行样式更改。触发器可以在属性值发生更改时启动操作。
像这样:
<Style TargetType="ListBoxItem"> <Setter Property="Opacity" Value="0.5" /> <Setter Property="MaxHeight" Value="75" /> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Trigger.Setters> <Setter Property="Opacity" Value="1.0" /> </Trigger.Setters> </Trigger> </Style.Triggers>
</Style>
还可以使用VisualState类来进行样式更改
VisualState类实现了可以让控件始终处于特定的状态,例如,当鼠标在控件的表面上移动时,该控件被视为处于MouseOver状态
。 没有特定状态的控件被视为处于公用 Normal
状态。
状态分为多个组,前面提到的状态属于 CommonStates
状态组(VisualStateGroup)。 大多数控件都有两个状态组:CommonStates
和 FocusStates
。
在应用于控件的每个状态组中,控件始终处于每个组的一种状态。但是,控件不能处于同一组中的两种不同状态。
完整的状态可以参照下表:
VisualState 名称 | VisualStateGroup 名称 | 描述 |
---|---|---|
普通 | CommonStates | 默认状态。 |
MouseOver | CommonStates | 鼠标指针悬停在控件上方。 |
已按下 | CommonStates | 已按下控件。 |
已禁用 | CommonStates | 已禁用控件。 |
已设定焦点 | FocusStates | 控件有焦点。 |
失去焦点 | FocusStates | 控件没有焦点。 |
下面我们使用VisualState类来自定义一个Button样式
1、使用Visual Studio 2019创建一个.Net Core WPF程序
2、在MainWindow中添加一个Button控件
1 <Window x:Class="VisualStateDemo.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:VisualStateDemo" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="450" Width="800"> 9 <Grid> 10 <Button Content="Test" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Height="26"/> 11 </Grid> 12 </Window>
3、在Windows.Resources下定义样式,如下
标签:Core,CommonStates,状态,App,VisualState,控件,Net,WPF 来源: https://www.cnblogs.com/zhaotianff/p/13254430.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。