Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Как использовать для своего контрола стиль,


Автор: Rohoss 20.12.2010, 18:50
Как использовать для своего контрола стиль, который предназначен для другого контола?

Допустим у меня есть наследник Button
Код

public class MyButton : Button

Так как MyButton мало чем отличается от Button я хочу, чтобы стиль определённый для Button работал и для MyButton. Как это сделать?

Автор: CYBERDREAM 21.12.2010, 10:27
Привет, используй ресурсы
http://www.wpftutorial.net/Styles.html

Автор: rooks 21.12.2010, 12:58
Код
<Style TargetType="{x:Type MyButton}" BasedOn="{StaticResource {x:Type Button}}"/>

Автор: Rohoss 21.12.2010, 15:01
Спасибо, вопрос решён  smile 

Автор: Rohoss 24.12.2010, 16:32
Цитата(rooks @  21.12.2010,  12:58 Найти цитируемый пост)
<Style TargetType="{x:Type MyButton}" BasedOn="{StaticResource {x:Type Button}}"/>

Тут имеется некоторая проблемка. При динамическом изменении стиля все Button меняют свой внешний вид, а вот MyButton остаётся прежним. Хотя иногда MyButton тоже меняет внешний вид а иногда нет (думаю дело в самом WPF), а вот Button меняет внешний вид всегда. Как сделать чтобы и MyButton всегда менял вид при изменении стиля? Заменить StaticResource на DinamicResource не возможно, так как
Цитата

A 'DynamicResourceExtension' cannot be set on the 'BasedOn' property of type 'Style'. A 'DynamicResourceExtension' can only be set on a DependencyProperty of a DependencyObject.

Автор: Kefir 27.12.2010, 11:37
Rohoss, хоть и непонятно когда и что у вас там меняется, но рискну предположить, что если напрямую менять стиль нацеленный на MyButton, то оно работает так как надо, а если менять стиль исходный (который значится в BasedOn), то изменения не идут в стиль MyButton. Если по-простому - ресурсы резолвятся заранее и изменение в базовых стилях в рантайме не приведет к изменениям производный стилей.

Автор: Rohoss 27.12.2010, 13:16
Цитата(Kefir @  27.12.2010,  11:37 Найти цитируемый пост)
 Если по-простому - ресурсы резолвятся заранее и изменение в базовых стилях в рантайме не приведет к изменениям производный стилей. 

Так вот, иногда приводит иногда нет. С чем связанно не пойму, но думаю может в самом WPF глюк.

Автор: Rohoss 18.1.2011, 18:14
Тут такая ситуация, если  к контролу применяю этот код

Цитата(Rohoss @  24.12.2010,  16:32 Найти цитируемый пост)
<Style TargetType="{x:Type MyButton}" BasedOn="{StaticResource {x:Type Button}}"/>


то при создании контрола с кода он кое как как адаптируется под стиль, но при создании контрола в XAML он вообще не меняет стандартный стиль... что же делать?

напомню, что стили подключаются во время работы приложения

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)