BasedOn = "{StaticResource {x: Type TextBox}}" в коде позади стиля - PullRequest
18 голосов
/ 04 марта 2011

Как вы можете установить следующее в коде позади?

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">

Я использую тему, объединенную в App.xaml. Он отлично работает для всех элементов управления, но когда я определяю стиль для чего-то, например, TextBox, стиль темы не будет выбран, если я не использую BasedOn, как указано выше, вместо этого он получает стиль по умолчанию TextBox.

Теперь я создаю код DataGridTextColumn и я не могу заставить BasedOn работать на EditingElementStyle

Style editingStyle = new Style(typeof(TextBox));
editingStyle.BasedOn = ...?;

Есть предложения? Кроме того, есть ли способ получить стиль темы вместо стиля по умолчанию, примененного без использования BasedOn?

Спасибо

Ответы [ 3 ]

24 голосов
/ 04 марта 2011

Попробуйте это:

editingStyle.BasedOn = (Style) FindResource(typeof (TextBox))

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

3 голосов
/ 04 марта 2011

Это должно работать:

Style baseStyle = new Style(typeof(TextBox));
Style editingStyle = new Style(typeof(TextBox));
editingStyle.BasedOn = baseStyle;

Вы также можете сделать это в конструкторе:

Style editingStyle = new Style(typeof(TextBox), baseStyle);
0 голосов
/ 18 августа 2016

Мне нравится ответ Павла Глазкова , но он не компилируется.

FindResource является (нестатическим) членом FrameworkElement . Требуется определить контекст поискового запроса.

Поэтому я рекомендую это:

style.BasedOn = (Style)frameworkElement.FindResource(typeof(TextBox));
...