基于自定义ToggleButton的Radiobutton样式

我创建了一个定制的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的切换按钮样式,否则我无法在模板中使用我的自定义依赖项属性。 有没有办法做到这一点?

更新:

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

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

现在在我的ToggleButton样式中,我更改ControlTemplate以使按钮具有圆角。 我决定我希望不同的按钮有不同的CornerRadius,或者根本不需要四舍五入。 我问在这篇文章中如何做到这一点:

继承/重写WPF样式

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


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

但是,也许我们会对如何以另一种稍微不同的方式解决您的问题提出一些建议; 你可以尝试勾勒出包含DependencyProperty的广泛需求? 也许甚至有一个内置的功能可以帮助你,但没有人能想到提供它,因为没有人知道它可以帮助你。

链接地址: http://www.djcxy.com/p/81347.html

上一篇: Radiobutton style based off of custom ToggleButton

下一篇: What is the best approach for applying styles to massive amounts of items?