Я подклассифицировал элемент ItemsControl (назовем его EnhancedItemsControl), и я хотел бы показать свойство зависимостей ScrollViewerTemplate, которое позволит пользователю дополнительно указать свой собственный шаблон для используемого ScrollViewer. Я делаю это так:WPF: свойство зависимости с типом шаблона - где получить шаблон по умолчанию (для установки в качестве значения по умолчанию)?
public ControlTemplate ScrollViewerTemplate
{
get { return (ControlTemplate)GetValue(ScrollViewerTemplateProperty); }
set { SetValue(ScrollViewerTemplateProperty, value); }
}
public static readonly DependencyProperty ScrollViewerTemplateProperty =
DependencyProperty.Register(
"ScrollViewerTemplate",
typeof(ControlTemplate),
typeof(EnhancedItemsControl),
new UIPropertyMetadata(new ScrollViewer().GetValue(ScrollViewer.TemplateProperty))); //This doesn't work for me
В моем стиле по умолчанию для моего EnhancedItemsControl, я тогда включить ScrollViewer так:
<ScrollViewer
Template="{TemplateBinding ScrollViewerTemplate}"
...
>
<ItemsPresenter
...
/>
</ScrollViewer>
Это работает, когда пользователь указывает ScrollViewerTemplate, но когда он уходит он по умолчанию, ScrollViewer не отображается (по-видимому, потому, что он Template пуст). Как я могу сказать WPF Использовать шаблон только в том случае, если он не является нулевым, в противном случае используется значение по умолчанию? (мне показалось, что я могу использовать триггеры для установки шаблона только тогда, когда он не равен нулю, но мне не нравится идея запуска триггера для каждого пользовательского свойства в каждом из моих элементов управления ...)
Аналогичная проблема возникает со стилями - если я хочу, чтобы пользователь указывал стиль ScrollViewer, но пользователь не указал его, значение ScrollViewerStyle было бы равно null (равное <ScrollViewer Style="{x:Null}" />
), что остановило бы стиль по умолчанию для применения!
Как это решить? Спасибо!
Спасибо, ты мужчина! Я не знал, что могу получить стиль по умолчанию из словаря ресурсов, индексированного по типу, это довольно неинтуитивно - спасибо снова за то, что показал мне, это намного лучше, чем назначать стиль/шаблон с помощью триггера, когда они не равны нулю. –
Пока все остальное неясно, одно несомненно, я человек :) –