我创建了一个自定义的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的不同值时添加新样式。
谢谢亚历克斯。我已经按照我的要求更新了原始帖子。 – Flack 2010-09-21 16:18:59
我确定我错过了一些东西,但为什么不直接从RadioButton继承? – 2010-09-21 18:23:13
嗯。你是对的。我创建了一个RadioButtonEx,它扩展了RadioButton,然后创建了一个样式来改变它的ControlTemplate。我不需要在任何地方引用ToggleButton。感谢Alex的帮助。 – Flack 2010-09-22 12:53:20