【发布时间】:2015-04-20 09:32:16
【问题描述】:
我们的应用程序中的按钮具有特定的外观和感觉,这些按钮在 ButtonBase 的命名样式中定义,这也恰好是 Button、ToggleButton 和 RepeatButton 的默认样式。
我们还有 ToolbarButtons 派生自 ButtonBase 并包含额外的属性,例如 Text 和 Icon。这些用于在ToolbarButton 上放置特定文本和图标。
ToolbarButtons的主题在Themes/generic.xaml中定义如下:
<Style TargetType="{x:Type c:ToolbarButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type c:ToolbarButton}">
<Button Command="{TemplateBinding Property=Command}">
.. controls to place text and icon etc ..
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如您所见,我在基于ButtonBase 的控件中使用Button 控件,并将Command 绑定到包含的Command 上的Button。这个 hack 确保我可以通过定义 Button 默认样式来覆盖 Toolbar 中使用的“按钮”样式。
这一切似乎都很好,但是在Button 中使用Button 感觉不对。我仍然想知道我是否在做正确的事情。有什么想法吗?
【问题讨论】:
-
确实,我不认为在另一个按钮内部有一个按钮是正确的。我真的不明白它的目的。您想拥有应用程序的特定按钮样式,并且能够只为您的 ToolbarButton 覆盖一些属性吗?
-
原因是我现在可以使用 ToolbarButton 样式模板化 ToolbarButton 的内部,同时使用默认按钮样式模板化按钮的镶边。
标签: wpf wpf-controls controltemplate