我的Window中有此代码。资源
<Style Selector="RadioButton.Nav" >
<Setter Property="FontSize" Value="6"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="Margin" Value="5 5 5 0"/>
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type RadioButton}">
<ControlTemplate.Content>
<Border
Height="{TemplateBinding Height}"
CornerRadius="12"
Width="180"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter
VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
</ControlTemplate.Content>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后,我用它在我的单选按钮上
<RadioButton Classes="Nav" Content="Dashboard"/>
我试图改变我的单选按钮的设计,使它看起来像一个按钮,但当我使用的风格,单选按钮disappers。代码在WPF中工作,但我不能让它在Avalonia中工作。
1条答案
按热度按时间3npbholx1#
首先,样式在Window.Styles中,而不是Window.Resources中。
第二,您不需要在Avalonia中指定TargetType。删除
TargetType="{x:Type RadioButton}"
(我不确定这是否会导致问题,但我知道不需要)。最后,您提供的ContentPresenter正在覆盖Content和ContentTemplate的重要绑定,我建议在您的情况下只从Fluent theme中复制一个,因为您所更改的只是对齐方式,您可以通过设置样式本身中的HorizontalContentAlignment和VerticalContentAlignment属性来设置。
最后一点,考虑TemplateBinding CornerRadius和Width,这会使进一步的造型更容易。与WPF不同,CornerRadius不需要是附加属性(即使用
CornerRadius
而不是Border.CornerRadius
)最后一点,Avalonia中的控件对VerticalAlignment和HorizontalAlignment有不同的默认设置。这在我开始的时候引起了很大的困惑。它的工作原理与WPF完全相同,但在WPF中的默认值是“拉伸”,而在Avalonia中,它分别是“左”和“中心”,因此下面的样式将在窗口上向左和垂直居中,宽度为180,它不会像WPF那样垂直填充容器,并水平居中,如果您想要将VerticalAlignment设置为拉伸和HorizontalAlignment设置为拉伸或中心。