【转】【Avalonia】Avalonia 学习之样式的选择器和伪类

选择器

要设置样式,我们首先要找到对应的控件吧,所以各种各样选择的方式就出现了,这就是要说的Selector,有以下几种方式可供使用

类型选择

可以通过控件的类型来选择,也是最简单的一种选择器
比如

Selector="TextBlock"

如果是用户控件或者模块化控件,需要加上命名空间和 |

<Styles xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:StylesDemo.Controls">
    <Design.PreviewWith>
        <Border Padding="20">
            <local:FirstUserControl/>
            <!-- Add Controls for Previewer Here -->
        </Border>
    </Design.PreviewWith>

    <!-- Add Styles Here -->
    <Style Selector="local|FirstUserControl">
        <Setter Property="Background" Value="Blue"/>
    </Style>
    <!--<Style Selector=":is(local|FirstUserControl)">
        <Setter Property="Background" Value="Green"/>
    </Style>-->
</Styles>

xmlns:local="clr-namespace:StylesDemo.Controls" 这个就是我添加的用户控件所在的命名控件,选择器有俩种方式, 一种是 local|FirstUserControl 一种是is的写法 :is(local|FirstUserControl),注意前面的 :号。

Name选择

可以通过控件的Name属性来选择

Selector="TextBlock#my"
<TextBlock Name="my" Text="带名字的TextBlock"/>

Class选择

Selector="TextBlock.Big"
<TextBlock Classes="Big" Text="带Classes的TextBlock"/>

Child选择

Selector="StackPanel > TextBlock"

子选择器是通过用>字符分隔两个选择器来定义的 。此选择器匹配逻辑树中的直接子级,因此在上面的示例中,选择器将匹配作为 StackPanel 的直接逻辑子级的任何按钮。

后代选择

Selector="StackPanel TextBlock"

当俩个选择器用空格分隔时,选择器将匹配逻辑树中的后代,因此在这种情况下,选择器将匹配StackPanel逻辑后代的任何按钮。

属性选择

Selector="CheckBox[IsChecked=True]"

Template

<Style Selector="Button:pointerover /template/ContentPresenter">
            <Setter Property="BorderBrush" Value="Red" />
</Style>

这个可能很多时候要和伪类(:pointerover)配合使用,因为它的实际背景由ContentPresenter呈现,而在源码中有对它的设定,这意味着你直接向下面这样写是没有效果的

<Style Selector="Button:pointerover">
            <Setter Property="BorderBrush" Value="Red" />
</Style>

Not

Selector="TextBlock:not(.Big)"

选择不具有Big类的TextBlock

Nth Child

Selector="TextBlock:nth-child(4)"

选择第四个TextBlock

Nth Lash Child

Selector="TextBlock:nth-last-child(3)"

根据元素在一组同级姐妹中的位置匹配元素,从末尾开始计算。
注意: 这个不是说找倒数第三个TextBlock,如果最后一个TextBlock下面还有俩个元素,这其实是找的最后一个TextBlock.
Nth Child()和Nth Lash Child() 都采用单个参数,而且元素索引从1开始。

功能符号

An+B 表示列表中的元素,其索引有An+B定义的自定义数字模式中的索引匹配,其中:
A 是整数步长
B 是整数偏移量
n 是所有非负整数,从0开始。
可以理解为从B开始的每个A th元素。
实例:

表示法
:nth-child(odd)奇数元素 1、3、5等
:nth-child(even)偶数元素 2、4、6等
:nth-child(2n +1)奇数元素
:nth-child(2n)偶数元素
:nth-child(7)第7个元素
:nth-child(n+7)从第7个元素开始,7、8、9...
:nth-child(3n+4)从第4个元素开始,4、7、10、13等
:nth-child(-n+3)前3个元素

一些选择器的示例

选择器描述
Button选择所有按钮控件
Button#myButton选择名称为 myButton的按钮控件
Button.red选择具有red样式类的所有按钮控件
Button.red.large选择具有red和large样式类的所有按钮控件
Button.red:focus选择具有red样式类和:focus伪类的所有按钮控件
StackPanel Button.foo选择具有 foo 类的所有按钮,这些按钮是StackPanel的后代
StackPanel > Button.foo选择具有 foo类的所有按钮,这些按钮是StackPanel的子级
Grid:pointerover Button选择有 :pointerover伪类的grid 下的所有按钮
Button /template/ContentPresenter选择按钮模板内的所有内容演示器控件

伪类

与 CSS 中一样,Avaloniad的控件可以具有伪类;这些伪类是由控件本身而不是由用户定义的类。个人感觉跟事件触发器差不多。 可以选择 处于什么状态的控件
伪类以 : 字符开头.如 Border:pointerover

一个简单的伪类例子

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="AvaloniaStyle.MainWindow"
        Title="AvaloniaStyle">
    <Window.Styles>
        <Style Selector="Border:pointerover">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </Window.Styles>

    <StackPanel Spacing="20">
        <Border>
            <TextBlock Text="鼠标滑过将变红"/>
        </Border>
        <Button Content="按钮" />
        <CheckBox />
    </StackPanel>
</Window>

我们在写代码的时候,如果要用到这个伪类,要在控件元素后空一格, 然后敲 : 这时候是会有代码提示的,如果不空格的话,我试的是没有的。

还有就是我们怎么知道它有哪些可以事件可以用来设置呢?
我们可以通过Avalonia工具窗口来获取。比方在我这个例子里, 通过F12打开工具窗口,在右下角的这里可以看到有哪些image

原文地址:https://www.cnblogs.com/mchuang/p/17328603.html

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Avalonia是一个**跨平台的UI框架,用于创建桌面应用程序**。 以下是一些关于Avalonia的基本信息和学习资源: 1. **什么是Avalonia?**:Avalonia是一个基于WPF XAML的开源UI框架,它允许开发者使用.NET构建跨平台的桌面应用程序。Avalonia支持多种操作系统,包括Windows、Linux和macOS。 2. **准备工作**:在开始使用Avalonia之前,你需要安装相应的开发环境,并配置项目。这通常包括安装.NET SDK和Avalonia工具包。 3. **创建第一个Avalonia应用程序**:你可以通过官方文档或相关教程来创建你的第一个Avalonia应用,这将帮助你理解基本的应用程序结构和开发流程。 4. **XAML基础**:XAML是一种用于定义用户界面的语言,你可以学习如何使用XAML来创建界面布局和实现数据绑定。 5. **控件和样式**:Avalonia提供了丰富的控件库,你可以学习如何使用这些控件以及如何通过样式和模板来自定义它们的外观。 6. **MVVM模式**:MVVM(Model-View-ViewModel)是一种设计模式,用于分离应用程序的业务逻辑和界面表示。学习MVVM将有助于你构建可维护和可测试的应用程序。 7. **导航和多窗口**:了解如何在Avalonia中进行窗口导航和管理多个窗口,这对于构建复杂的桌面应用程序非常重要。 8. **打包和发布应用程序**:最后,你需要学习如何将你的Avalonia应用程序打包和发布,以便用户可以在他们的计算机上安装和使用你的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值