gpt4 book ai didi

wpf - 为什么在这种情况下无法解析 StaticResource?

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:03 24 4
gpt4 key购买 nike

当我尝试执行以下操作时,“找不到名为‘mrg’的资源。资源名称区分大小写。”出现异常:

主窗口.xaml:

<Window.Resources>
<Thickness Left="0"
Right="1"
Bottom="2"
Top="3"
x:Key="mrg" />
</Window.Resources>
<Grid>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:UserControl1 />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>

主窗口.xaml.cs:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<string> source = new List<string>()
{
"item1",
"item2",
"item3",
"item4",
"item5",
};
DataContext = source;
}
}

和 UserControl1.xaml:

<Grid>
<TextBlock Text="{Binding}" Margin="{StaticResource mrg}" />
</Grid>

根据msdn article :

静态资源查找行为

  1. 查找过程在设置属性的元素定义的资源字典中检查请求的键。

  2. 查找过程然后向上遍历逻辑树,到达父元素及其资源字典。这一直持续到到达根元素。

  3. 接下来,检查应用程序资源。应用程序资源是由 WPF 应用程序的 Application 对象定义的资源字典中的那些资源。

因此,由于第 2 步,必须找到资源。但是,正如我在捕获异常时在 Locals 窗口中看到的那样,UserControl1.Parent == null.

我对这个问题很困惑。我能解决的方法是把资源放到Application层。

我的问题是:为什么找不到 StaticResource?

最佳答案

DataTemplate 形成了自己的逻辑树,与 ItemsControl 的逻辑树断开连接。因此,遍历逻辑树的查找将找不到资源。

我无法在 MSDN 中找到引用,只能找到 this article on CodeProject ,它写着:

The elements that are part of an expanded template, hereafter referred to as "template elements", form their own logical tree which is disconnected from the logical tree of the object for which they were created.


使用 DynamicResource 而不是 StaticResource 将解决这个问题。但是我不能确切地说出为什么。也许可以在 Static and Dynamic Resources静态资源查找行为动态资源查找行为 部分找到解释。 ,但我不确定。

关于wpf - 为什么在这种情况下无法解析 StaticResource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502056/

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