【问题标题】:How to define x:Key for resource in one place and use it in XAML and code behind如何在一个地方为资源定义 x:Key 并在 XAML 和代码后面使用它
【发布时间】:2012-06-16 11:09:17
【问题描述】:

标题中的问题几乎可以概括。我在 XAML 中定义了一些资源对象,我也想在后面的代码中访问它。那么有没有办法在一个地方为它定义 x:Key 而不是在 XAML 和代码后面硬编码 x:Key (作为字符串)?

【问题讨论】:

  • 你的意思是你不想在 XAML 中编写 x:Key="STRING" 然后在后面的代码中再次在 FindResource ("STRING") 中编写,你想要一些方法创建一次并保护自己不必在两个地方进行关键更改?
  • 是的,这正是我想要的

标签: wpf xaml resources


【解决方案1】:

如果您不想对字符串进行两次编码,可以将其存储为静态变量,这里我将其放在 App.cs 中

public partial class App : Application
{
    public static string Key1 = "testKey";
}

当你想在你的应用的资源中使用这个键时,你可以这样做。

<Application.Resources>        
   <SolidColorBrush x:Key="{x:Static local:App.Key1}"/>
</Application.Resources>

在 C# 中,您不再需要使用确切的字符串名称,因为它在 App 中

var brush = FindResource(App.Key1);

要使用 XAML 中的资源,请使用

<TextBox Background="{StaticResource {x:Static local:App.Key1}}" 

【讨论】:

  • +1 以获得对问题的巧妙而具体的回答;这确实将字符串定义移动到一个地方。不过,我想知道它对 XAML 加载性能有何影响,该方法在 DataTemplateStyle 中是否有用,以及它是否适用于 Triggers
  • 老实说,我从未尝试过。只是因为我很好奇是否可以完成而发布。我认为它需要更多的代码,而不仅仅是简单地放入字符串。XAML 编辑器中没有智能感知,所以它并没有真正的帮助。
  • 嘿,这很好用,刚刚测试过。我从没想过使用静力学。与 DataTemplate 和样式设置器/触发器一起使用。谢谢!
  • np,没有人对我使用“静态变量”一词感到惊讶,哈哈:D
  • 您可以使用nameof来完全摆脱字符串! public partial class App : Application { public const string TestKey = nameof(TestKey); }
【解决方案2】:

在 XAML 中,您可以像这样引用它:

{StaticResource myResource}

在代码隐藏中,您将使用FindResource 方法。

【讨论】:

  • 你能提供更多细节吗?您是如何定义 myResource 的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
相关资源
最近更新 更多