我正在创建一个从切换按钮扩展的简单自定义控件,该控件允许用户直接在 XAML 中指定选中和未选中的内容。它工作得很好,但它是基于触发器的,我不知道如何定义触发器,除了样式之外。如果我定义样式,那么我会丢失自定义控件之外设置的任何内容。
我希望能够做的只是将此触发器附加到控件上其他位置设置的任何现有样式。
这是样式/触发器的 XAML。
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource Self}, Path=UncheckedContent}" />
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content"
Value="{Binding RelativeSource={RelativeSource Self}, Path=CheckedContent}" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
我尝试通过具有默认类型的 BasedOn 继承样式,但如果自定义控件具有由其父级设置的显式样式,则它将不起作用。我也考虑过 EventTriggers,但我不相信会有一个事件来初始化控件。
感谢任何人可以提供的任何帮助。 :)
只是为了澄清这里的术语:A用户控制是从 UserControl 类派生的控件。如果我理解正确,您可以从 ToggleButton 派生来添加 UncheckedContent 和 CheckedContent 属性。在这种情况下,您已经创建了一个自定义控件。如果我们就通用术语达成一致,那么总是更容易理解:)
据我所知,您无法在 XAML 中执行此类通用样式继承。您始终必须明确指定另一种样式基于什么样式。您的样式可以基于 ToggleButton 的默认样式或特定的其他样式。如果您无法构建尊重这一点的样式继承链,则此方法将不起作用。
但是既然你有一个自定义控件,你不能为它编写一个基于默认切换按钮样式的默认样式吗?
<Style TargetType="{x:Type CustomToggleButton}"
BasedOn="{StaticResource {x:Type ToggleButton}}">
然后,每当您将显式样式应用于切换按钮时,您都会指定它基于默认的切换按钮样式。
您还可以在包含上述触发器的 Themes\Generic.xaml 中为新切换按钮编写(默认)控件模板。在混合中,您可以获得切换按钮的默认模板的副本(“编辑模板”->“编辑副本”),这样您就可以确保切换按钮看起来与普通切换按钮完全相同。然后将上面的触发器合并到该模板中。
顺便说一句:您不必只是为了添加新属性而创建新控件。您可以使用以下命令向现有控件添加新属性附加属性 http://msdn.microsoft.com/en-us/library/cc903943%28VS.95%29.aspx。它们可以像普通属性一样从 XAML 中使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)