我想别名XAML资源,如下所示:
<UserControl.Resources>
<StaticResourceExtension x:Key="newName" ResourceKey="oldName"/>
</UserControl.Resources>
oldName
仅仅指的类型的资源Image
,在所定义App.xaml
。
据我了解,这是做到这一点的正确方法,并应做工精细。 但是,XAML代码给我的寄望无益的错误:
"The application XAML file failed to load. Fix errors in the application XAML before opening other XAML files."
当我将鼠标悬停在这似乎StaticResourceExtension
在代码行(其具有波浪下划线)。 在实际的错误列表生成其他一些错误,但似乎是相当无关和nonsenical(这样的消息为“‘的InitializeComponent’这个名字不会在目前情况下存在”),当该行被删除,他们全部消失。
我在这里完全难住了。 为什么WPF抱怨这个代码? 任何想法,以一个分辨率吗?
注:我在.NET 3.5 SP1使用WPF。
更新1:
我应该clairfy,我确实收到编译器错误(错误列表上述消息),所以它不只是一个设计师的问题。
更新2:
下面是相关的代码完全...
在App.xaml中(下Application.Resource
):
<Image x:Key="bulletArrowUp" Source="Images/Icons/bullet_arrow_up.png" Stretch="None"/>
<Image x:Key="bulletArrowDown" Source="Images/Icons/bullet_arrow_down.png" Stretch="None"/>
而在MyUserControl.xaml(下UserControl.Resources
):
<StaticResourceExtension x:Key="columnHeaderSortUpImage" ResourceKey="bulletArrowUp"/>
<StaticResourceExtension x:Key="columnHeaderSortDownImage" ResourceKey="bulletArrowDown"/>
这些都是产生过程中的错误,行。
我尝试过,可能,我无法重现你的问题。 我想有更多的发挥比你发布的代码。 这对我来说工作得很好:
App.xaml中 :
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
<Image x:Key="bulletArrowUp" Source="Leaves.jpg" Stretch="None"/>
<Image x:Key="bulletArrowDown" Source="Leaves.jpg" Stretch="None"/>
</Application.Resources>
</Application>
Window1.xaml:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<local:UserControl1/>
</Window>
UserControl1.xaml:
<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<StaticResourceExtension x:Key="columnHeaderSortUpImage" ResourceKey="bulletArrowUp"/>
<StaticResourceExtension x:Key="columnHeaderSortDownImage" ResourceKey="bulletArrowDown"/>
</UserControl.Resources>
<ContentControl Content="{StaticResource columnHeaderSortUpImage}"/>
</UserControl>
我加入了Leaves.jpg图像到我的项目,它显示就好了。
我尝试使用相同的设置肯特并收到以下错误:
Property 'Resources' does not support values of type 'System.Windows.Controls.Image'.
我也尝试了一些其他类型的,并得到了同样的事情(只具有不同的完全限定类型名称)。
我才能够重新键图像中的<UserControl.Resources>
以下列方式:
<UserControl.Resources>
<Image x:Key="myimg"
Source="{Binding Source={StaticResource appimg}, Path=Source}"
Stretch="{Binding Source={StaticResource appimg}, Path=Stretch}"/>
</UserControl.Resources>
我不得不怀疑:为什么呢? 资源没有被设计成可以再加密。 我有一个怀疑,你最终要完成的可以做一些其他的方式更好,更容易。 可能与在样式setter方法。