BasedOn = "{StaticResource {x: Type TextBox}}" в коде для стиля для стиля

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

<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?

Спасибо

Ответы

Ответ 1

Попробуйте следующее:

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

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

Ответ 2

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

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

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

Style editingStyle = new Style(typeof(TextBox), baseStyle);

Ответ 3

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

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

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

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