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

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)

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

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

Vib*_*wer 5

使用Application.Current.Resources ["Button"].


Ale*_*lex 5

对于任何后代:这是我如何成功地通过代码将样式从资源应用到动态创建的控件。(假设您有一个包含样式的资源字典)

第一步:包含资源字典

要从代码中轻松访问资源字典,请通过代码添加它。

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