You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中如何通过代码访问全局资源字典中的样式?

问题背景

我在Styles.xaml文件中定义了如下样式:

<Style
     x:Key="LabelFiledVerticalStyle"
     TargetType="Label">   
     <Setter Property="Margin" Value="0,7,0,0" />
</Style>

尝试两种后台代码访问方式均失败:

  • 方法1:

    var LabelStyle = (Style)Application.Current.Resources["LabelFiledVerticalStyle"];
    

    运行报错:The resource "LabelFiledVerticalStyle" is not present in the dictionary

  • 方法2:

    var hasValue = Resources.TryGetValue("LabelFiledVerticalStyle", out object style);
    if (hasValue)
    {
        var LabelStyle = (Style)style;
    }
    

    hasValue始终返回false

解决方案

1. 确认资源字典已合并到应用全局资源

如果Styles.xaml未被添加到App.xaml的资源字典中,Application.Current.Resources无法找到该样式。在App.xaml中添加以下配置:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- 若Styles.xaml不在根目录,需填写正确相对路径,如/YourProject;component/Styles.xaml -->
            <ResourceDictionary Source="Styles.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

2. 从对应资源层级获取

如果Styles.xaml仅合并在某个页面/控件的资源中,而非全局资源:

  • 从当前页面资源查找:
    var hasValue = this.Resources.TryGetValue("LabelFiledVerticalStyle", out object style);
    if (hasValue)
    {
        var labelStyle = (Style)style;
    }
    
  • 或直接加载目标资源字典:
    var resourceDict = new ResourceDictionary();
    resourceDict.Source = new Uri("Styles.xaml", UriKind.Relative);
    var labelStyle = (Style)resourceDict["LabelFiledVerticalStyle"];
    

3. 检查资源文件的编译属性

确保Styles.xaml的Build Action设置正确:

  • WPF/UWP项目:设置为Page
  • 其他类型项目:根据框架要求设置为Embedded Resource
    (右键Styles.xaml → 属性 → 查看Build Action选项)

4. 验证资源键名拼写

确认代码中的键名LabelFiledVerticalStyle与XAML中的定义完全一致(WPF资源键区分大小写),避免拼写错误(如Filed与Field混淆)

内容的提问来源于stack exchange,提问作者Divyesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:27:06