我有个例外“找不到名为'mrg'的资源,资源名称区分大小写。”当我试图做到以下几点:为什么StaticResource在这种情况下无法解析?
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 article:
静态资源查找行为
用于由设置属性的元素定义的资源字典内的请求键的查找过程检查。
查找过程然后向上遍历逻辑树到父元素及其资源字典。这一直持续到达到根元素。
接下来,检查应用程序资源。应用程序资源是资源字典中由WPF应用程序的Application对象定义的资源。
所以资源不得不因为步骤2的被发现,但,我可以在Locals
窗口看到,当异常被逮住时,UserControl1.Parent == null
。
我很困惑这个问题。我可以解决的方法是将资源放到应用程序级别。
我的问题是:为什么StaticResource connot找不到?
很好的建议,我会继续调查这个问题。 – stukselbax
用动态替换静态工作,不知道为什么.. –
在我的情况下,我通过合并在需要它的窗口或用户控件内的资源字典来解决它,而不是合并在App.xaml“全局”。所有人都在设计时看起来很好,但在运行时得到了这个异常,所以这有点令人费解。 – angularsen