UWP中的XAML:通过使用继承自定义标记名而不是样式属性

时间:2019-05-23 14:01:37

标签: c# wpf xaml uwp controls

我开始在UWP App中处理XAML控件。

我想为同一控件(某种类型的UI库)创建多个变体,这些变体将在应用程序中重用,比如说“大按钮”和“小按钮”。

在实现“自定义标记名”控件个性化方面是否存在任何性能问题,缺点或更好的方法?

(我个人发现,一旦对每个控件进行样式化,它的可读性就会更高,出错的可能性也会更少。)

非常感谢!


“通用”方式似乎是基于Button创建样式/模板的,就像这样:

  

Styles.xaml(资源词典)

<Style x:Key="MyBigButtonStyle" TargetType="Button">
    <Setter Property="FontSize" Value="36"/>
</Style>

<Style x:Key="MySmallButtonStyle" TargetType="Button">
    <Setter Property="FontSize" Value="10"/>
</Style>

然后声明控件,如下所示:

  

MyView.xaml(页面)

<Button Style="{StaticResource MyBigButtonStyle}">My Big Button</Button>
<Button Style="{StaticResource MySmallButtonStyle}">My Small Button</Button>

“自定义标记名”方式,为了便于阅读和简化(使用custom作为正确的名称空间用法):

  

MyCustomButtons.cs

namespace MyApp.MyCustomComponents
{
    public sealed class MyBigButton : Button {}
    public sealed class MySmallButton : Button {}
}
  

Styles.xaml

<Style Target="custom:MyBigButton">
    <Setter Property="FontSize" Value="36"/>
</Style>
<Style Target="custom:MySmallButton">
    <Setter Property="FontSize" Value="10"/>
</Style>
  

MyView.xaml

<custom:MyBigButton>My Big Button</custom:MyBigButton>
<custom:MySmallButton>My Small Button</custom:MySmallButton>

1 个答案:

答案 0 :(得分:1)

创建自定义控件,重新模板化还是对现有控件进行样式化完全取决于您的要求。该决定不涉及“性能问题”。

如果您不打算向控件添加任何新的功能,则创建这样的另一个类就没有多大意义:

add_filters('editable_roles', function ($roles) {
            $roles = array_reverse($roles);
            return $roles;
        });

然后,您还可以简单地创建自定义样式或模板。

有关更多信息,请参阅Jerry Nixon's MSDN Magazine文章,了解如何在XAML中创建自定义控件。