Ale*_*lex 2 vb.net wpf visual-studio
我有一个资源字典包含程序控件的所有自定义样式.Dictionary与应用程序的资源合并,如下所示:
<ResourceDictionary x:Key="Controls">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Controls.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
我可以通过xaml轻松访问不同的样式:
<Button Style="{StaticResource Button}" />
Run Code Online (Sandbox Code Playgroud)
但每当我尝试通过代码使用此样式分配控件时,它都会失败.
我试过了:
Button.Style = Application.Current.Resources("Button")
Button.Style = CType(Application.Current.Resources("Button"), Style)
Run Code Online (Sandbox Code Playgroud)
以及与上述类似的不同方法.在测试一些获得样式的不同方法时,我遇到了"未找到资源",但在使用上述方法时,程序似乎找到了样式.我可以成功运行该程序 - 但没有任何视觉证据确实应用了该样式.
如何正确地为控件分配资源字典中找到的样式?
对于任何后代:这是我如何成功地通过代码将样式从资源应用到动态创建的控件。(假设您有一个包含样式的资源字典)
第一步:包含资源字典
要从代码中轻松访问资源字典,请通过代码添加它。
VB
Dim myResourceDictionary As New ResourceDictionary
myResourceDictionary .Source = New _
Uri("/YourApplication;component/YourDictionary.xaml",
UriKind.RelativeOrAbsolute)
Run Code Online (Sandbox Code Playgroud)
C#
var myResourceDictionary = new ResourceDictionary
{
Source = new Uri("/YourApplication;component/YourDictionary.xaml", UriKind.RelativeOrAbsolute)
};
Run Code Online (Sandbox Code Playgroud)
将“YourApplication”替换为您的解决方案名称,将“YourDictionary”替换为您的资源字典文件。
第二步:指定样式
要使用新导入的资源字典,只需为控件分配样式;
VB
Dim myButton As New Button
Dim myButtonStyle As Style = myResourceDictionary("YourStyleKey")
myButton.Style = myButtonStyle
Run Code Online (Sandbox Code Playgroud)
C#
var myButtonStyle= myResourceDictionary["YourStyleKey"] as Style;
var myButton = new Button { Style = myButtonStyle };
Run Code Online (Sandbox Code Playgroud)
特别感谢用户Stefan Denchev为我提供了一篇涵盖此内容的文章。由于 C# 不是我的强项,如果我犯了任何错误,请编辑它。