Включить общий ресурс в ResourceDictionaries для нескольких элементов управления - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть DataTemplate, который я хотел бы использовать с несколькими ContentControl с.Но каждый из этих элементов управления также должен содержать дополнительные DataTemplate с, и окончательный список отличается для каждого.Примерно так:

<DataTemplate x:Key="FooDataTemplate" DataType="{x:Type Foo}" />

<!-- snip -->

<ContentControl>
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type Bar}" />
        <!-- Also want a copy of FooDataTemplate here, but without an explicit key -->
    </ContentControl.Resources>
</ContentControl>

<ContentControl>
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type Baz}" />
        <!-- Also want a copy of FooDataTemplate here, but without an explicit key -->
    </ContentControl.Resources>
</ContentControl>

Есть ли синтаксис XAML, который позволит мне это сделать?Я мог бы создать прикрепленное поведение «AddResourceToDictionary» или поместить FooDataTemplate в свой собственный файл словаря ресурсов и объединить его, но оба эти способа кажутся ужасными хлопотами для простой вещи ...

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете добавить FooDataTemplate к ContentControl's ResourceDictionary, при условии, что оно находится в области видимости:

<ContentControl>
    <ContentControl.Resources>
        <ResourceDictionary>
            <DataTemplate DataType="{x:Type Bar}" />
            <StaticResource ResourceKey="FooDataTemplate" />
        </ResourceDictionary>
    </ContentControl.Resources>
</ContentControl>

Но если вам нужна «копия FooDataTemplate, но без явного ключа»,вам нужно создать новый DataTemplate самостоятельно.Не существует синтаксиса XAML, который позволял бы вам основывать DataTemplate на другом.Шаблон должен быть определен как единое целое.Поэтому я думаю, что ответ на ваш вопрос просто нет.

FooDataTemplate можно ссылаться только и использовать как есть.И поскольку он уже находится в области действия, в действительности нет смысла добавлять его в ContentControl's ResourceDictionary.

...