如何通过代码访问资源(样式)?

时间:2013-09-15 13:53:17

标签: wpf vb.net visual-studio

我有一个资源字典,其中包含程序控件的所有自定义样式。 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)

与上述方法类似的不同方法。 在测试一些获得样式的不同方法时,我遇到了“未找到资源”,但在使用上述方法时,程序似乎找到了样式。 我可以成功运行该程序 - 但没有任何视觉证据证明样式确实已应用。

如何正确地为资源字典中找到的样式分配控件?

2 个答案:

答案 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#不是我的强项,如果我犯了任何错误,请编辑它。