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