Таргетинг DataTemplate только для определенных представлений - PullRequest
1 голос
/ 14 июня 2010

У меня есть DataTemplate внутри глобального / общего ResourceDictionary, подобного этому, который нацелен на DataType:

<DataTemplate DataType="{x:Type foo:Bar}">
    <!-- My DataTemplate visual tree goes here... -->
</DataTemplate>

Этот DataTemplate заменяет все мои типы foo: Bar на всех моих представлениях (UserControls / Windows).Что я хочу сделать, так это применить этот шаблон только к определенным представлениям, чтобы другие представления не влияли на этот шаблон данных.Я могу скопировать этот DataTemplate в разделы ресурсов каждого из этих представлений, но я не хочу копировать / вставлять содержимое DataTemplate, что может привести к головной боли при обслуживании.

1 Ответ

2 голосов
/ 14 июня 2010

То, что вы здесь используете, называется неявный шаблон данных .И вы просите явного.Для этого вы можете использовать явный ключ ресурса:

<DataTemplate x:Key="MyStyle" DataType="{x:Type foo:Bar}">
    <!-- My DataTemplate visual tree goes here... -->
</DataTemplate>

и позже в xaml:

<ContentPresenter ContentTemplate="{StaticResource MyStyle}" .../>

Другим решением будет один словарь ресурсов (с неявными шаблонами данных), используемый через Объединенные словари внутри соответствующего элемента управления / страницы.

Я предпочитаю первый подход, потому что его легче поддерживать (неявные стили гораздо сложнее отследить).

...