gpt4 book ai didi

wpf - 如何从当前组件资源中引用静态资源?

转载 作者:行者123 更新时间:2023-12-01 13:05:16 28 4
gpt4 key购买 nike

这里是问题的演示:

从一个简单的窗口:

<Window x:Class="TestWpfStaticResource.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<TextBlock Text="{StaticResource TestString}">
<TextBlock.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</TextBlock.Resources>
</TextBlock>

我正在尝试访问 ResourceDictionary 中的资源:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="TestString">Test</sys:String>
</ResourceDictionary>

Visual Studio 2010 在我的窗口中显示了预期的结果,但是在运行应用程序时我得到了这个异常:

Cannot find resource named 'TestString'. Resource names are case sensitive.

注意 1:当使用 DynamicResource 时,结果在 VS 2010 和运行时都很好。

注意 2:将对资源字典的引用放在 TextBlock 之外,例如在 Windows 资源中,会给出预期的结果,但我的实际情况不允许这样做。

那么,我做错了什么以及如何获得预期结果?

回答:经过更多测试后,XAML 解析器似乎非常精简,并且按顺序解析内容,而不尝试解释任何内容。所以声明顺序很重要:您必须在对字典的引用之后放置对“文本”属性的引用。唯一的方法似乎是将对 StaticResource 的引用包装在“绑定(bind)”元素中。

提前致谢。

最佳答案

我认为问题是当它试图找到静态资源时,它还没有被合并到当前资源字典中……虽然不确定。

这样做似乎可行:

    <TextBlock>
<TextBlock.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</TextBlock.Resources>

<TextBlock.Text>
<Binding Source="{StaticResource TestString}" />
</TextBlock.Text>
</TextBlock>

关于wpf - 如何从当前组件资源中引用静态资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567606/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com