Aliasing Resources (WPF) - PullRequest
       24

Aliasing Resources (WPF)

3 голосов
/ 17 июля 2009

Я пытаюсь создать псевдоним ресурса в 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 в коде (которая имеет волнистое подчеркивание). Несколько других ошибок генерируются в реальном списке ошибок, но кажутся довольно нерелевантными и несуразными (такие сообщения, как «Имя InitializeComponent не существует в текущем контексте»), поскольку все они исчезают при удалении строки.

Я полностью в тупике. Почему WPF жалуется на этот код? Любые идеи относительно резолюции, пожалуйста?

Примечание. Я использую WPF в .NET 3.5 SP1.

Обновление 1:
Я должен подтвердить, что я do получаю ошибки компилятора (вышеупомянутые сообщения в списке ошибок), так что это не просто проблема дизайнера.

Обновление 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 ]

2 голосов
/ 17 июля 2009

Как ни старайся, я не могу воспроизвести твою проблему. Я думаю, что в игре есть нечто большее, чем код, который вы опубликовали. Это прекрасно работает для меня:

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 в свой проект, и оно отображалось очень хорошо.

1 голос
/ 29 июля 2009

Я попытался использовать ту же настройку, что и Кент, и получил следующую ошибку:

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>

Я должен задаться вопросом: почему?Ресурсы не были предназначены для повторного ввода.У меня есть подозрение, что то, что вы в конечном итоге пытаетесь достичь, можно было бы сделать лучше и проще другим способом.Возможно с сеттерами в стиле.

...