将默认的按钮样式应用于自定义按钮类

go

我创建了一个自定义Button继承的自定义IconButton类,并添加了一些依赖项属性以将图像放置在按钮文本的前面。

代码开始像这样:

public partial class IconButton : Button
{
    // Dependency properties and other methods
}

它带有一个如下所示的XAML文件:

<Button x:Class="Unclassified.UI.IconButton" x:Name="_this" ...>
    <Button.Template>
        <ControlTemplate>
            <Button
                Padding="{TemplateBinding Padding}"
                Style="{TemplateBinding Style}"
                Focusable="{TemplateBinding Focusable}"
                Command="{TemplateBinding Button.Command}">

                <StackPanel ...>
                    <Image .../>
                    <ContentPresenter
                        Visibility="{Binding ContentVisibility, ElementName=_this}"
                        RecognizesAccessKey="True"
                        Content="{Binding Content, ElementName=_this}">
                        <ContentPresenter.Style>
                            ...
                        </ContentPresenter.Style>
                    </ContentPresenter>
                </StackPanel>
            </Button>
        </ControlTemplate>
    </Button.Template>
</Button>

到目前为止效果很好。(但是,如果您知道一种更简单的方法来覆盖Button的内容而不更改整个模板并将Button放置在Button中,请告诉我。每次尝试时,Visual Studio 2010 SP1在关闭最终XML标签的那一刻立即崩溃)

现在,我添加了一些代码来修复WPF破坏了Windows 8的Aero2主题。这是一个单独的ResourceDictionary,它将覆盖各种默认样式:(基于此通过此处

<ResourceDictionary ...>
    <Style TargetType="{x:Type Button}">
        ...
    </Style>
</ResourceDictionary>

新的ResourceDictionary会在启动时添加到App.xaml.cs中的“应用程序资源”中:

protected override void OnStartup(StartupEventArgs args)
{
    base.OnStartup(e);
    // Fix WPF's dumb Aero2 theme if we're on Windows 8 or newer
    if (OSInfo.IsWindows8OrNewer)
    {
        Resources.MergedDictionaries.Add(new ResourceDictionary
        {
            Source = new Uri("/Resources/RealWindows8.xaml", UriKind.RelativeOrAbsolute)
        });
    }
    ...
}

这对于我放置在XAML视图中的普通Button控件也很有效。(我仍在寻找一种方法来找出真正的Windows主题,而不是依靠版本号。)

但是我的IconButton控件没有考虑这些新的默认值,仍然基于WPF的内置Button样式,这是非常基本的。(它实际上是一个狭窄的矩形,没有Win32显示的所有详细信息和交互。)

我想我需要一种方法告诉我的IconButton,它应该重新评估基本样式并查看新添加的RealWindows8样式。我怎样才能做到这一点?

go

我找到了解决方案。有两种方法可以完成此操作。任一个都足够。

XAML方式:

将样式属性添加到派生的控件。这将新控件的样式显式预设为应用程序中定义为Button样式的任何样式。为此,StaticResource就足够了。如果在使用派生控件的位置指定了其他样式,则它将替换此初始值。

<Button Style="{StaticResource {x:Type Button}}" ...>
    ...
</Button>

代码(隐藏)方式:

在派生类的构造函数中调用SetResourceReference方法。

public IconButton()
{
    // Use the same style as Button, also when it is overwritten by the application.
    SetResourceReference(StyleProperty, typeof(Button));
    ...
}

我已经为我的IconButton以及派生的TabControl和TabItem类进行了测试。

来源

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义样式应用于页面上的所有按钮

来自分类Dev

将样式应用于单选按钮

来自分类Dev

将自定义样式应用于微调器

来自分类Dev

如何清除应用于元素的自定义样式?

来自分类Dev

如何将CSS样式应用于自定义属性

来自分类Dev

JavaFX:使用自定义样式表将文本颜色应用于TableCell吗?

来自分类Dev

JavaFX:使用自定义样式表将文本颜色应用于TableCell吗?

来自分类Dev

将样式应用于Xamarin.Forms中的iOS自定义渲染器

来自分类Dev

无法将样式应用于按钮的点击事件

来自分类Dev

需要帮助以将样式应用于按钮

来自分类Dev

将一个simple_form自定义包装器应用于某些单选按钮,将其他包装器应用于其他单选按钮

来自分类Dev

不能使用样式化组件将样式应用于React Native中的自定义组件吗?

来自分类Dev

Facebook登录按钮:应用自定义样式

来自分类Dev

将CSS类应用于div中的“按钮”

来自分类Dev

仅将 CSS 类应用于被点击的按钮

来自分类Dev

将语义应用于自定义 git 流

来自分类Dev

如何将Material-UI按钮样式应用于html-native按钮

来自分类Dev

如何将样式表应用于PyQt中的自定义窗口小部件

来自分类Dev

如何将导入的样式表应用于自定义元素的模板标签内容?

来自分类Dev

如何将导入的样式表应用于自定义元素的模板标签内容?

来自分类Dev

如何将轮廓仅应用于自定义样式的HTML选择元素的扩展clickable元素?

来自分类Dev

将默认序列化程序应用于自定义序列化程序(GSON)中的属性

来自分类Dev

Android上的自定义按钮样式

来自分类Dev

在PrimeNG中自定义按钮样式

来自分类Dev

设置自定义按钮的样式

来自分类Dev

自定义样式单选按钮

来自分类Dev

Android上的自定义按钮样式

来自分类Dev

将图像应用于按钮背景

来自分类Dev

将按钮 javascript 应用于 a href

Related 相关文章

  1. 1

    将自定义样式应用于页面上的所有按钮

  2. 2

    将样式应用于单选按钮

  3. 3

    将自定义样式应用于微调器

  4. 4

    如何清除应用于元素的自定义样式?

  5. 5

    如何将CSS样式应用于自定义属性

  6. 6

    JavaFX:使用自定义样式表将文本颜色应用于TableCell吗?

  7. 7

    JavaFX:使用自定义样式表将文本颜色应用于TableCell吗?

  8. 8

    将样式应用于Xamarin.Forms中的iOS自定义渲染器

  9. 9

    无法将样式应用于按钮的点击事件

  10. 10

    需要帮助以将样式应用于按钮

  11. 11

    将一个simple_form自定义包装器应用于某些单选按钮,将其他包装器应用于其他单选按钮

  12. 12

    不能使用样式化组件将样式应用于React Native中的自定义组件吗?

  13. 13

    Facebook登录按钮:应用自定义样式

  14. 14

    将CSS类应用于div中的“按钮”

  15. 15

    仅将 CSS 类应用于被点击的按钮

  16. 16

    将语义应用于自定义 git 流

  17. 17

    如何将Material-UI按钮样式应用于html-native按钮

  18. 18

    如何将样式表应用于PyQt中的自定义窗口小部件

  19. 19

    如何将导入的样式表应用于自定义元素的模板标签内容?

  20. 20

    如何将导入的样式表应用于自定义元素的模板标签内容?

  21. 21

    如何将轮廓仅应用于自定义样式的HTML选择元素的扩展clickable元素?

  22. 22

    将默认序列化程序应用于自定义序列化程序(GSON)中的属性

  23. 23

    Android上的自定义按钮样式

  24. 24

    在PrimeNG中自定义按钮样式

  25. 25

    设置自定义按钮的样式

  26. 26

    自定义样式单选按钮

  27. 27

    Android上的自定义按钮样式

  28. 28

    将图像应用于按钮背景

  29. 29

    将按钮 javascript 应用于 a href

热门标签

归档