Radiobutton样式基于自定义ToggleButton

时间:2010-09-21 15:30:07

标签: wpf wpf-controls

我创建了一个自定义的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,

  

“如果你用a创建一个样式   TargetType属性并以其为基础   另一种也定义了一种风格   TargetType属性,目标类型   派生风格必须相同   作为或来自的类型   基本风格。“

由于单选按钮是从ToggleButton派生而不是ToggleButtonEx,我无法应用样式,我需要切换按钮样式基于ToggleButtonEx,否则我无法在模板中使用我的自定义依赖项属性。有没有办法做到这一点?

更新

这是我的要求。也许有人可以提供替代解决方案。

我想将单选按钮显示为切换按钮,这样它们看起来像切换按钮,但保持单选按钮互斥功能。这并不难。我创建了一个针对ToggleButton的样式来设置我想要的切换按钮样式,然后创建一个基于切换按钮样式的RadioButton新样式。

现在在我的ToggleButton样式中,我更改ControlTemplate以使按钮具有圆角。我决定我想要不同的按钮来使用不同的CornerRadius',或者根本不进行舍入。我问过这篇文章怎么做:

Inheriting/overriding WPF styles

一个建议是创建一个自定义ToggleButton并添加一个新属性,以便它可以在TemplateBinding中使用。我试过了,但看起来如果有可能,我做得不对。每次我需要不同的CornerRadius值时,我都想避免添加新样式。

1 个答案:

答案 0 :(得分:0)

不,我认为没有办法做到这一点,除非你从ToggleButtonEx派生出一个自定义的RadioButton,复制了RadioButton中存在的所有功能。但我怀疑这很有趣 - 甚至可能完全不可能。

但是,我们可能会就如何以另一种略有不同的方式解决您的问题提出一些建议;您可以尝试概述包含DependencyProperty的广泛要求吗?也许有一个内置的功能可以帮助你,但没有人能想到它的建议,因为没有人知道它可能会帮助你。