问题标签 [resourcedictionary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 拆分 WPF 资源字典
我有一个 WPF 应用程序,它由大约七个用户控件组成,每个控件上都有各种不同的控件(文本框、组合框、单选按钮等)。
在整个应用程序中,我应用了一组来自 CodePlex 上的 WPF 主题的控件样式,但是我注意到自从应用这些样式后,应用程序的速度有所下降。包含我所有样式的 ResourceDictionary 的代码大小接近 300kb。
通过将样式拆分为多个资源字典并仅合并每个用户控件所需的样式而不是所有控件样式,即使它们没有被使用,是否会有好处。
WPF 如何将样式加载到内存中?需要时还是在启动时将整个 ResourceDictionary 加载到内存中?
wpf - 使用 xaml 资源,但保留每个引用的唯一内容
我有几个 ListBox 并设置了组样式以制作组扩展器。我希望所有的 ListBoxes 使用相同的样式信息来使它们都成为扩展器,但我希望能够将标题的内容更改为自定义样式的每次使用。
有什么办法我可以取出但仍然编辑的内容
目前,我正在使用与此类似的语法:
非常感谢任何帮助!
谢谢阅读
wpf - 使用 XAML 中的系统类型作为资源
我遇到了一种情况,直接在 XAML 中指定浮点值并将其用作我的几个 UI 片段的资源非常有用。在四处搜索后,我发现了大量有关如何在 XAML 中包含正确程序集 (mscorlib) 的信息,以便您可以做到这一点。
不幸的是,在我尝试这样做的一个实例中,我遇到了一个例外。下面是重现这种情况的以下 XAML:
当我尝试编译并运行它时,我收到一个 XamlParseException 向我抛出,它说“'120' 不是属性'Width' 的有效值”。
但是“Width”属性是双精度的,那么为什么我不能使用定义的 StaticResource 来设置它呢?有谁知道如何做到这一点?
wpf - 为什么 Generic.xaml 中的合并字典需要绝对 uri?
考虑一个文件 | WPF 应用程序的新项目,其中包含:
- 一个名为 CustomControl1 的新自定义控件
- 两个名为 Dictionary1 和 Dictionary2 的新资源字典
从 Generic.xaml 中取出生成的样式并将其移至 Dictionary2。然后将 Dictionary2 合并到 Dictionary1 中,将 Dictionary1 合并到 Generic 中,如下所示:
然后,将 CustomControl1 的一个实例添加到 MainWindow 的网格中。(这部分是重现问题所必需的。项目总是编译得很好——只有在运行时才会出现问题,并且必须引用字典。)
在 Dictionary1.xaml 中,我将合并到同一文件夹中的另一个 dict 中,因此一个简单的 Source="Dictionary2.xaml" 可以工作。然而在 Generic.xaml 中,我必须使用绝对 URI。如果我将上面的内容更改为 Source="Dictionary1.xaml" 而没有 pack://application 东西,那么当它尝试构造 MainWindow 时,我会得到一个由 IOException“无法定位资源 'dictionary1.xaml'”引起的 XamlParseException。
我的问题: generic.xaml 关于相对 URI 解析有什么特别之处,为什么?
silverlight - 为什么 XamlReader.Load 在 Silverlight 4 中无法识别我的附加属性?
我试图弄清楚如何在我们的 Silverlight 4 应用程序中以编程方式在运行时应用主题。我认为这应该像从 XAML 加载资源字典并将其与应用程序的合并字典合并一样简单。到目前为止,这是我的代码:
不幸的XamlParseException
是,在调用 a 期间引发了XamlReader.Load
:
在“Bar”类型中找不到可附加属性“Foo”。
正确附加的这个被正确声明,并且 XAML 中的命名空间声明正确引用了所需的命名空间。如果通过 App.xaml 标记以声明方式将附加属性 XAML 加载到合并字典中,则该属性可以正常工作。
这是我试图在运行时加载的 XAML 的缩写副本:
为什么在运行时加载 XAML 时对附加属性的引用不起作用,而在“静态”加载时它工作得很好?
silverlight - 访问放置在不同程序集和 XAP 中的外部静态资源
我的基于 prism 的 silveright 应用程序分为多个 xap,以减少初始下载大小并支持多租户应用程序。
但是,我无法访问外部程序集中定义的资源字典(即资源 .xaml 文件是符合/复制到不同 xap 的程序集的一部分)
有什么建议么 ?因为访问外部资源文件的标准语法不起作用
silverlight - Silverlight 4 中具有显式样式的运行时主题切换
有人要求我们向我们的应用程序添加动态主题切换,但我在弄清楚如何做到这一点时遇到了问题。
这是当前的情况:我们的应用程序有一个具有显式(非隐式)样式的合并资源字典。StaticResource
我们应用程序中的视图通过标记扩展引用这些样式。我们不使用隐式样式的原因是我们对常见类型的控件有多种外观;例如,一个位置的按钮看起来与另一个位置的按钮不同。
所以我们想要做的是创建主题,用一组新的命名样式替换这些命名样式。
方法一
第一次尝试是为每个主题创建资源字典。我从常用字典中删除了其中一种样式,并将它们放在每个主题字典中,使每个副本具有独特的外观,如下所示:
然后,我添加了代码以从 XAML 动态加载资源字典之一并将其插入到应用程序的合并字典中:
这在一定程度上奏效了。如果我在启动期间加载了“主题”,则会显示该主题的样式。但是,没有奏效的是在启动后尝试切换到另一个主题。将其他主题主题字典添加到合并字典不会导致 UI 被修改。也没有清除旧的主题词典并添加新的。也没有做任何这些,然后删除根视觉并重新添加它。
方法二
之后,我尝试使用 Silverlight Toolkit 主题模式。我认为这不起作用,因为它旨在切换隐式样式而不是显式样式。我创建了我的 Theme 派生类,设置了它的资源字典 URI,并将该主题添加到了 root visual ContentControl
。但是,当我创建主 UI 类时,找不到 UI 引用的显式样式,因此发生了运行时异常。
因此,我尝试将其中一个主题资源字典加载到应用程序的合并字典中。这允许创建主 UI 类并将其放置在Style
对象内部。但是,Style
资源字典中的显式样式无法覆盖应用程序合并字典中定义的样式。因此,似乎没有任何改变。
当前方法
所以现在我正在考虑第三种方法。它将涉及使用类似这样的附加属性:Theming.Style="StyleName"
. 然后,在应用程序的其他地方,将维护主题名称和样式名称覆盖之间的关联。每当主题更改时,将应用主题的正确样式。
困境
如果已经有一个轮子,我宁愿不重新发明一个轮子。Silverlight 中是否已经内置了允许切换包含显式样式的主题的功能?是否有任何第三方库可以让我做我想做的事?
.net - 在解析 XAML 之前向 UserControls 添加静态 ResourceDictionary
我有一个 WPF 控件,我想在我的 WinForms 应用程序(使用 ElementHost)中的多个位置(=> 此控件的多个实例)中使用它。
此外,我希望我的 UserControl 的所有实例共享一个 ResourceDictionary 的单个实例。
在 WPF 应用程序中,我可以通过在应用程序资源中合并我的 ResourceDictionary 来实现。
但是,我不想在我的 WinForms 应用程序中创建 WPF 应用程序实例。相反,我正在寻找另一种方式。
我找到了一个解决方案,但我希望您知道一种不需要任何代码的更好方法:
用户控件.xaml.cs:
这样可行。但我更喜欢只适用于 XAML 的解决方案。另外,我希望能够使用 StaticResources。因此,在控件初始化后将静态 ResourceDictionary 添加到 Controls MergedDictionaries 不是一种选择。
我尝试了以下方法,但它引发了一个奇怪的“堆栈为空”异常:
也许有人知道更好的方法。
谢谢,双习惯
silverlight - 如何在 Silverlight 中创建两个相互引用的 HierarchicalDataTemplate?
鉴于:
- 数据模板不能由 TargetType 分配
- StaticResource 引用只能引用以前
如何在 TreeView 中对以下情况进行模板化?
这种结构很适合一棵看起来像这样的树:
由于. TargetType
_ HierarchicalDataTemplate
在 Silverlight 中,我们必须做更多类似的事情:
这显然无法工作,因为ResourceTemplate
无法引用PropertyTemplate
,因为它是在 XAML 文档中定义的。那么,如何解决这个先有鸡还是先有蛋的问题呢?
silverlight - Silverlight 4:在不使用 Toolkit 的情况下更改整个应用程序的主题/样式
我们正在着手进行我们的第一个 Silverlight 项目,该项目来自 WPF。这是一个相对简单的 Web 门户,鉴于我们使用 WPF 工具包的经验,我们希望避免引用 Silverlight 工具包。
我不是一个编码员,并且有几个与主题相关的问题:
隐式样式使这更容易。很明显,您可以切换资源字典来更改主题。我如何在不依赖工具包的情况下做到这一点?
如何将样式应用于整个应用程序,例如在 WPF 中,而不是将内容包装在主题容器中?我看到您可以使用 ApplicationThemeURI,但这需要工具包。
谢谢。