2015-08-25 6 views
0

У меня есть настраиваемый элемент управления в 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> 

Но это приводит к тому, управление равны нулю, я предполагаю, потому что это удаление шаблона. Что я делаю не так? С помощью других элементов управления базой данных вы можете просто установить нужные свойства, не теряя шаблон управления.

ответ

1

Вам необходимо наследовать стиль по умолчанию, который вы создали.

inherit style from default style

+0

Без ключа у меня все еще не было никаких изменений. Если я устанавливаю ключ и устанавливаю стиль, тогда получаю исключение статического ресурса, поскольку мой тип управления не существует. Мне интересно, может ли это быть, потому что я определил свой шаблон управления в UserControl.Resources элемента управления, который я создал, а не в словаре ресурсов? – amnesia

+0

Да, это личное. Вам нужно переместить его, вы можете поместить его в свой App.xaml или, как правило, если вы используете элемент меню Visual Studio для создания своего элемента управления, он создаст для вас тему/Generic.xaml с пустым шаблоном. –

+0

Принятый ответ, хотя если кто-то еще наткнется на это, обратите внимание, что это не сработает, если ваш шаблон управления определен в личных ресурсах вашего элемента управления. – amnesia

Смежные вопросы