WinUI:使用轻量级样式时如何减少重复代码?

发布于 2025-01-11 00:04:07 字数 695 浏览 0 评论 0原文

我正在使用轻量级样式 设置按钮样式:

<Button ...>
    <Button.Resources>
        <SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="#48B2E9"/>
        <SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="Black"/>
        ...
    </Button.Resources>
</Button>

我想将此样式应用于多个(但不是全部)按钮。

目前,我需要将这些 复制并粘贴到我想要设计样式的每个按钮。

有没有办法避免这种重复?

我尝试创建一种样式,但不知道如何在样式中设置资源。

我想我可以创建一个控制模板,但这似乎很严厉。

I am using lightweight styling to style a button:

<Button ...>
    <Button.Resources>
        <SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="#48B2E9"/>
        <SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="Black"/>
        ...
    </Button.Resources>
</Button>

I would like to apply this styling to multiple (but not all) buttons.

Currently I need to copy and paste these <Button.Resources> to every button I want styled.

Is there a way to avoid this duplication?

I tried creating a style but couldn't figure out how to set resources in a style.

I guess I could create a control template, but that seems heavy handed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无畏 2025-01-18 00:04:07

抱歉,造成误解,

您无法在样式定义上设置资源。
因此,您必须向按钮添加附加的 DependencyProperty,然后将其设置在样式定义上

,请参阅 这个

Sorry About Misundrstanding

you cannot set Resources on a style definition.
so you must add a attached DependencyProperty to button and then set it on a style definition

see this

佞臣 2025-01-18 00:04:07

您可以考虑创建一个始终应用资源的自定义 Button 控件,而不是尝试设置内置 Button 的样式。

在 Visual Studio 中将 UserControl 添加到项目(项目 -> 添加新项 -> 用户控件),并将 XAML 文件的内容替换为如下内容:

<!-- MyCustomButton.xaml -->
<Button
    x:Class="WinUIApp.MyCustomButton"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    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">
    <Button.Resources>
        <SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="#48B2E9"/>
        <SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="Black"/>
    </Button.Resources>
</Button>

...并更改基础相应地,代码隐藏类的类:

// MyCustomButton.xaml.cs
public sealed partial class MyCustomButton : Button
{
    public MyCustomButton()
    {
        this.InitializeComponent();
    }
}

然后您可以照常在任何其他视图中创建此 Button 的实例,例如:

<local:MyCustomButton Content="Click me!" />
<local:MyCustomButton Content="Another button..." />

Instead of trying to style a built-in Button, you could consider creating a custom Button control which always have the resources applied to it.

Add a UserControl to the project (Project->Add New Item->User Control) in Visual Studio and replace the contents of the XAML file with something like this:

<!-- MyCustomButton.xaml -->
<Button
    x:Class="WinUIApp.MyCustomButton"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    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">
    <Button.Resources>
        <SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="#48B2E9"/>
        <SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="Black"/>
    </Button.Resources>
</Button>

...and change the base class of the code-behind class accordingly:

// MyCustomButton.xaml.cs
public sealed partial class MyCustomButton : Button
{
    public MyCustomButton()
    {
        this.InitializeComponent();
    }
}

You could then create instances of this Button in any other view as usual, e.g.:

<local:MyCustomButton Content="Click me!" />
<local:MyCustomButton Content="Another button..." />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文