2010-09-21 123 views
0

我创建了一个自定义的ToggleButton类,ToggleButtonEx,它扩展了ToggleButton。 ToggleButtonEx包含我创建的一些依赖项属性,以便在模板中使用它们。我想将所有单选按钮的样式基于新的切换按钮样式。以下是我有:基于自定义ToggleButton的Radiobutton样式

的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的属性,目标类型派生的风格的 必须相同 为或者可以从 基本风格中派生出来。“

由于单选按钮切换按钮从导出并没有ToggleButtonEx,我无法应用该样式的,我需要切换按钮样式是基于关闭ToggleButtonEx的,否则我不能在使用个性化的依赖属性模板。有没有办法做到这一点?

UPDATE:

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

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

现在在我的ToggleButton样式中,我更改ControlTemplate以使按钮具有圆角。我决定我希望不同的按钮有不同的CornerRadius,或者根本不需要四舍五入。我问怎么能在这个岗位来完成:

Inheriting/overriding WPF styles

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

回答

0

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

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

+0

谢谢亚历克斯。我已经按照我的要求更新了原始帖子。 – Flack 2010-09-21 16:18:59

+0

我确定我错过了一些东西,但为什么不直接从RadioButton继承? – 2010-09-21 18:23:13

+0

嗯。你是对的。我创建了一个RadioButtonEx,它扩展了RadioButton,然后创建了一个样式来改变它的ControlTemplate。我不需要在任何地方引用ToggleButton。感谢Alex的帮助。 – Flack 2010-09-22 12:53:20