首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DynamicResource到StaticResource

从DynamicResource到StaticResource
EN

Stack Overflow用户
提问于 2011-04-01 05:24:56
回答 2查看 2K关注 0票数 0

我已经在一个WPF项目上工作了一段时间,但现在已经有两个月没有接触过它了。现在我又回到了它上面,我有以下问题:

我使用合并的字典来创建皮肤,并在运行时轻松地交换它们。但是,每个外观在运行时都不会更改。但是,虽然我对此并不在行,但我只是遵循了一堆教程,并且我在任何地方都使用DynamicResource,甚至不知道我是否应该使用StaticResource。

结果是,当我尝试使用windows XP (我使用的是seven)将我的应用程序发送给一个朋友时。我的应用程序被抛出了露娜主题,让设计变得丑陋……据我所知,它来自DynamicResource。

所以现在,我想改成StaticResource,我简单地试着把每个"DynamicResource“替换成"StaticResource”。它抛出了这个异常:

代码语言:javascript
复制
Message = "'La valeur fournie sur 'System.Windows.StaticResourceExtension' a levé une exception.' numéro de ligne '8' et position de ligne '230'."

In english, it means: Message = "'The value given to 'System.Windows.StaticResourceExtension' threw an exception.' line number '8' and position on the line '230'.

然后我放了一个try/catch代码块来更好地了解这个问题:

代码语言:javascript
复制
{"Impossible de trouver la ressource nommée'styleBackground'. Les noms de ressources respectent la casse."}

英文:Impossible to find the resource named 'styleBackground'. The resource names are case sensitive.

是关于TabItem的。

所以这里有两个问题:我把DynamicResource改成StaticResource是对的吗?如果是这样,我需要做什么?

谢谢,

FB.

编辑:程序在这些行的最后一行中得到错误:

代码语言:javascript
复制
<Window x:Class="Sc2ReplayMonkey.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        xmlns:local="clr-namespace:Sc2ReplayMonkey" ResizeMode="CanResize"
        Title="Starcraft II Replay Monkey"
        Width="991" Icon="Resources\Icons\SC2_Replay_Monkey.png"
        WindowStartupLocation="CenterScreen" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="1024" Height="774" Visibility="Visible" Foreground="#00000000" Margin="0">
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-27 17:48:02

解决方案是在启动时加载所有资源字典,而不是从没有皮肤(使用动态资源)开始,然后让用户在运行时选择一个皮肤。

票数 0
EN

Stack Overflow用户

发布于 2011-04-01 19:29:11

你是如何认为问题来自DynamicResource的?

据我所知,与StaticResource相反,DynamiResource只用于在运行时获取资源,而不是在编译时。在必须在声明资源之前引用资源的情况下(如果使用StaticResource,这将引发编译错误),DynamicResource非常有用。

代码语言:javascript
复制
<ResourceDictionary><DataTemplate>... <Rectangle Fill={DynamicResource MyBrush}></Rectangle>  ...</DataTemplate> <SolidColorBrush x:Key="MyBrush"></SolidColorBrush> <ResourceDictionary>

在这种情况下,使用StaticResource而不是DynamicResource将引发编译错误。

现在,关于您的问题,如果您不显式地为您的控件分配样式,WPF将从当前操作系统主题中选择默认样式,在您的情况下是XP主题。为了解决这个问题,你可以选择Win 7主题,然后将其嵌入到你的应用程序中。

这为你增加了更多的工作,但这是重新定义所有控件样式的唯一方法,这样它就可以保留这些样式,而不管它是在什么操作系统上执行的。

HTH

Riana

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5506540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档