我有一个异常“无法找到名为‘MRG’的资源。资源名称是区分大小写的。” 当我试图做到以下几点:
MainWindow.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>
MainWindow.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文章 :
静态资源查找行为
查找过程检查由设置属性的元素定义的资源字典内的请求的密钥。
然后,查找过程遍历逻辑树向上,父元素及其资源字典。 这将继续,直到达到根元素。
接下来,应用资源进行检查。 应用资源是资源字典中的资源由Application对象为您的WPF应用程序定义。
因此,资源不得不因为步骤2的被发现,但,我可以在看到Locals
窗口时异常被逮住时, UserControl1.Parent == null
。
我在这个问题感到困惑。 我可以解决这个问题的方法是把资源的应用水平。
我的问题是:为什么静态资源被粗野,找到?