2013-11-21 7 views
0

Я создаю пользовательский элемент управления. И вдруг встал вопрос: зачем ставить стиль управления отдельно от контроля? Я имею в виду, что, используя стандартный способ, вы должны: получить базовый элемент управления (например, из TextBox) и добавить для него стиль в general.xaml. Но почему мы не можем сделать так же, как это:Стиль места внутри пользовательского контроля

<TextBox x:Class="CustomTest.CoolTextBox" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <TextBox.Style> 
     <Style> 
      <Setter Property="TextBox.FontSize" Value="20" /> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

И код-за:

public partial class CoolTextBox : TextBox 
{ 
    public CoolTextBox() 
    { 
     InitializeComponent(); 
    } 
} 

Update # 1

Я не пишу свою собственную библиотеку, но и создание пользовательский элемент управления внутри моего основного исполняемого файла. Темы поддержки приложений, но они отличаются только цветами. Поэтому каждая тема представляет собой набор ресурсов кисти, и мой стиль будет ссылаться на них, используя DynamicResource.

Что я хочу знать, это недостатки этого решения. Я имею в виду производительность, простоту использования и т. Д.

ответ

1

WPF позволяет изменять темы во время выполнения, означает, что стиль должен храниться отдельно от элементов управления. Более того, управление должно быть беззаботным при проектировании, чтобы другие программисты имели свои собственные стили, хотя где-то должен существовать стиль по умолчанию, который должен храниться отдельно в файле Generic.xaml. Если ваше приложение не поддерживает изменения тем, вы можете определить стиль, где бы вы ни пожелали.

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

Вот ссылка, как должно было бы создать пользовательские элементы управления:

http://wpftutorial.net/HowToCreateACustomControl.html

+0

Спасибо за ответ! См. Обновление # 1 –

+0

Динамические ресурсы медленнее, чем StaticResources, и их следует избегать. –

+0

Согласен! Но в текущем проекте не так много элементов управления, и это замедление невидимо. –

0

В дополнение к ответ Dev ежа о производительности, я обнаружил следующие недостатки: объект

  1. Style является собственностью для каждого экземпляра контроля. Таким образом, вы получаете число клонов одного и того же объекта Style.
  2. Вы не можете переопределить стиль, используя свойство BasedOn. Возможна только полная замена.
Смежные вопросы