2009-07-17 89 views
3

我想别名XAML资源,如下所示:别名资源(WPF)

<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线(其中有一个波浪下划线)出现。在实际的错误列表中生成了其他几个错误,但似乎是相当不相关的和无用的(“名称'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"/> 

这些是生成错误的行,当然。

回答

2

尽我所能,我无法重现您的问题。我认为,比起你发布的代码来,游戏更多。这对我来说工作得很好:

的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图片添加到我的项目中,并且显示得很好。

+0

感谢您的回复。不,不幸的是,会产生实际的编译器错误(如果我没有定义别名,所有的废话都会消失)。不知道它是否有所作为,但您是否注意到我使用的资源是“Image”元素? – Noldorin 2009-07-20 22:36:53

+0

你能发布你的完整代码吗? – 2009-07-21 08:29:42

1

我尝试使用相同的设置肯特并收到以下错误:

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> 

我不得不怀疑:为什么呢?资源不是为了重新设计而设计的。我怀疑你最终想要完成的事情可以通过其他方式更好,更容易地完成。可能与风格的二传手。