2009-07-17 102 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> 

我不得不懷疑:爲什麼呢?資源不是爲了重新設計而設計的。我懷疑你最終想要完成的事情可以通過其他方式更好,更容易地完成。可能與風格的二傳手。