欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Avalonia开发实践(四)——关于Setter优先级的问题

Avalonia开发实践(四)——关于Setter优先级的问题

2025/2/23 1:25:31 来源:https://blog.csdn.net/wsadcg/article/details/142929811  浏览:    关键词:Avalonia开发实践(四)——关于Setter优先级的问题

首先看一段样例代码:

<StackPanel Orientation="Horizontal" Spacing="50" HorizontalAlignment="Center"><StackPanel.Styles><Style Selector="Button.default"><Setter Property="Background" Value="Red"/></Style></StackPanel.Styles><!--Left Button--><Button Classes="default" Width="100" Height="100" Background="Blue"/><!--Right Button--><ContentControl><ContentControl.Template><ControlTemplate><Button Classes="default" Width="100" Height="100" Background="Blue"/></ControlTemplate></ContentControl.Template></ContentControl>
</StackPanel>

这段代码中有两个Button,且它们的属性值一模一样,只不过一个在LogicalTree中,一个在ControlTemplate中。仅仅这个区别,使得它们的呈现效果完全不一样,如下图:

左侧Button的Background生效了,而右侧Button的Background值没有生效,为什么会这样?

这里就不得不说Avalonia的Setter优先级机制了,官方给出的优先级清单如下:

Animation = -1, // Highest priority
LocalValue = 0,
StyleTrigger,
Template,
Style,
Inherited,
Unset = int.MaxValue, // Lowest priority

从上面可以看到,StyleTrigger的优先级是高于Template的,所以尽管在Template中设置了Background,但它的优先级和Template是等同的,因此优先级仍然没有Style中的Background高。

这一点我也在Github上得到了明确的解答,原回答如下:

简而言之就是,在Template中是没有办法覆盖Style中设置的属性的!!


以上案例也凸显了Avalonia和WPF的属性值优先级的不同。

在WPF中,Template的属性值优先级是高于Style的,官方文档如下:

依赖项属性值优先级 - WPF .NET | Microsoft Learn

可以编写对比代码进行验证这一点:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"><StackPanel.Resources><Style x:Key="DefaultButton" TargetType="Button"><Setter Property="Background" Value="Red"/></Style></StackPanel.Resources><!--Left Button--><Button Style="{StaticResource DefaultButton}" Width="100" Height="100" Background="Blue"/><!--Right Button--><ContentControl Margin="50,0,0,0"><ContentControl.Template><ControlTemplate><Button Style="{StaticResource DefaultButton}" Width="100" Height="100" Background="Blue"/></ControlTemplate></ContentControl.Template></ContentControl>
</StackPanel>

效果如下:

两个按钮都被设置成了蓝色! 


觉得有用就点个赞和关注吧,和我一起在Avalonia中爬坑>_<

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词