У меня есть настраиваемый элемент управления в WPF, который обладает множеством свойств зависимостей, которые позволяют визуальную настройку. Ради краткости я не буду отправлять полный контроль, но это в принципе установка так:Создание ресурса стиля для настраиваемого элемента управления удаляет шаблон
<UserControl.Resources>
<Style TargetType="{x:Type MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MyControl}">
<Border BorderBrush="{TemplateBinding BorderColor}">
// more stuff here
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter>
</Setter>
</Style>
</UserControl.Resources>
Свойство BorderColor отлично работает, если я установить его непосредственно, как это:
<ctl:MyControl BorderColor="Brushes.Red">....</ctl:MyControl>
Но я хочу установить его в приложении. Проблема в том, что если я просто устанавливаю стиль без ключа, он не применяется. Например:
<Window.Resources>
<Style TargetType="{x:Type ctl:MyControl}">
<Setter Property="BorderColor" Value="Brushes.Red"/>
</Style>
</Window.Resources>
Это не делает ничего для контроля. Так я думал, что просто установить ключ и применить этот стиль, как это:
<Style TargetType="{x:type ctl:MyControl}" x:Key="myStyle">....</Style>
<ctl:MyControl Style="{StaticResource myStyle}">.....</ctl:MyControl>
Но это приводит к тому, управление равны нулю, я предполагаю, потому что это удаление шаблона. Что я делаю не так? С помощью других элементов управления базой данных вы можете просто установить нужные свойства, не теряя шаблон управления.
Без ключа у меня все еще не было никаких изменений. Если я устанавливаю ключ и устанавливаю стиль, тогда получаю исключение статического ресурса, поскольку мой тип управления не существует. Мне интересно, может ли это быть, потому что я определил свой шаблон управления в UserControl.Resources элемента управления, который я создал, а не в словаре ресурсов? – amnesia
Да, это личное. Вам нужно переместить его, вы можете поместить его в свой App.xaml или, как правило, если вы используете элемент меню Visual Studio для создания своего элемента управления, он создаст для вас тему/Generic.xaml с пустым шаблоном. –
Принятый ответ, хотя если кто-то еще наткнется на это, обратите внимание, что это не сработает, если ваш шаблон управления определен в личных ресурсах вашего элемента управления. – amnesia