Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中对整个应用程序进行蒙皮的推荐方法是什么?_C#_.net_Wpf_Templates_Skinning - Fatal编程技术网

C# 在WPF中对整个应用程序进行蒙皮的推荐方法是什么?

C# 在WPF中对整个应用程序进行蒙皮的推荐方法是什么?,c#,.net,wpf,templates,skinning,C#,.net,Wpf,Templates,Skinning,我希望通过应用某个XAML模板,我的WPF应用程序是可蒙皮的,并且更改是应用程序范围的,即使对于动态控件或甚至不在可视化/逻辑树中的控件也是如此 我可以使用什么来实现这种类型的功能?有什么好的资源或教程可以展示如何完成这项特定任务吗?基本方法是在应用程序中使用所有资源,并在运行时动态替换资源 有关基本方法,请参见替换资源将起作用,但我发现“结构蒙皮”功能更强大!在CodeProject上阅读更多关于它的信息 我找到了一种方法,可以在不使用模板键的情况下将通用模板应用于所有控件。解决方案是使用控件

我希望通过应用某个XAML模板,我的WPF应用程序是可蒙皮的,并且更改是应用程序范围的,即使对于动态控件或甚至不在可视化/逻辑树中的控件也是如此


我可以使用什么来实现这种类型的功能?有什么好的资源或教程可以展示如何完成这项特定任务吗?

基本方法是在应用程序中使用所有资源,并在运行时动态替换资源


有关基本方法,请参见

替换资源将起作用,但我发现“结构蒙皮”功能更强大!在CodeProject上阅读更多关于它的信息


我找到了一种方法,可以在不使用模板键的情况下将通用模板应用于所有控件。解决方案是使用控件的类型作为样式键

例如:

 <Application.Resources>
    <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
        <Setter Property="Button.Background" Value="CornflowerBlue"/>
        <Setter Property="Button.Template">
            <Setter.Value>
                <ControlTemplate x:Name="MyTemplate">
                    ...
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

...

这里的样式键是x:key=“{x:Type Button}”,因此样式将应用于Button类型的所有控件,而控件不将样式属性声明为静态或动态资源

如果根本不指定x:Key,则TargetType将自动用作Key。干的(我也喜欢矢车菊蓝!)此外,有些零碎的东西内置了钥匙,你只需要知道就可以了。例如,菜单中的分隔符。这是一个古老的问题和答案,但除非我弄错了,否则该页面中提到的方法似乎也依赖于(至少部分)动态资源引用。有没有可能找到替代者?@Matt