.net Avalonia Radiobutton样式

cclgggtu  于 2023-05-19  发布在  .NET
关注(0)|答案(1)|浏览(431)

我的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中工作。

3npbholx

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设置为拉伸或中心。

<Window.Styles>
    <Style Selector="RadioButton.Nav" >
      <Setter Property="FontSize" Value="6"/>
      <Setter Property="FontWeight" Value="Bold"/>
      <Setter Property="BorderBrush" Value="Black"/>
      <Setter Property="BorderThickness" Value="1"/>
      <Setter Property="Margin" Value="5 5 5 0"/>
      <Setter Property="HorizontalContentAlignment" Value="Center"/>
      <Setter Property="VerticalContentAlignment" Value="Center"/>
      <Setter Property="CornerRadius" Value="12"/>
      <Setter Property="Width" Value="180"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate>
            <Border
              Height="{TemplateBinding Height}"
              CornerRadius="{TemplateBinding CornerRadius}"
              Width="{TemplateBinding Width}"
              BorderThickness="{TemplateBinding BorderThickness}"
              Background="{TemplateBinding Background}"
              BorderBrush="{TemplateBinding BorderBrush}">
              <ContentPresenter
                Name="PART_ContentPresenter"
                Margin="{TemplateBinding Padding}"
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                Content="{TemplateBinding Content}"
                ContentTemplate="{TemplateBinding ContentTemplate}"
                RecognizesAccessKey="True" />
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
</Window.Styles>

相关问题