Стиль радиокнопок, основанный на пользовательских ToggleButton - PullRequest
0 голосов
/ 21 сентября 2010

Я создал собственный класс ToggleButton, ToggleButtonEx, который расширяет ToggleButton. ToggleButtonEx содержит некоторые свойства зависимостей, которые я создал, чтобы использовать их в шаблоне. Я хочу, чтобы стиль всех моих переключателей базировался на новом стиле переключателей. Вот что у меня есть:

Стиль ToggeButtonEx, который определяет шаблон:

<Style TargetType="{x:Type local:ToggleButtonEx}">      
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type local:ToggleButtonEx}">
...

Стиль переключателя, основанный на стиле ToggleButtonEx:

<Style BasedOn="{StaticResource {x:Type local:ToggleButtonEx}}" TargetType="{x:Type RadioButton}">

Это не работает, хотя. Согласно MSDN,

"Если вы создаете стиль с Свойство TargetType и основывать его на другой стиль, который также определяет Свойство TargetType, тип цели производного стиля должен быть одинаковым как или быть производным от типа Базовый стиль. "

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

UPDATE:

Вот мое требование. Может быть, кто-то может помочь с альтернативным решением.

Я хочу отображать переключатели в виде переключателей, чтобы они выглядели как переключатели, но сохраняли функциональность взаимоисключающих переключателей. Это было не сложно сделать. Я создал стиль с таргетингом на ToggleButton, чтобы настроить желаемый стиль кнопок переключения, а затем создал новый стиль с таргетингом на RadioButton, основанный на стиле кнопок.

Теперь в моем стиле ToggleButton я изменяю ControlTemplate, чтобы у кнопки были закругленные углы. Я решил, что я хотел бы, чтобы разные кнопки имели разные значения CornerRadius 'или вообще не имели округления. Я спросил, как это можно сделать в этом посте:

Наследование / переопределение стилей WPF

Одним из предложений было создание пользовательского ToggleButton и добавление нового свойства, чтобы его можно было использовать в TemplateBinding. Я пробовал это, но, похоже, если это возможно, я не делаю это правильно. Я бы не хотел добавлять новый стиль каждый раз, когда мне нужно другое значение CornerRadius.

1 Ответ

0 голосов
/ 21 сентября 2010

Нет, я не думаю, что есть способ сделать это, если, возможно, вы не извлекаете пользовательскую RadioButton из вашего ToggleButtonEx, дублирующую все функции, существующие в RadioButton.Однако я сомневаюсь, что это очень весело - может даже не быть полностью возможным.

Однако, возможно, у нас будут некоторые предложения о том, как решить вашу проблему другим, немного другим способом;Вы могли бы попытаться обрисовать в общих чертах требования, которые продиктовали включение DependencyProperty?Может быть, есть даже встроенная функция, которая может вам помочь, но никто не мог и подумать о том, чтобы предложить ее, потому что никто не знает, что она может вам помочь.

...