假设我已经定义了一个带圆角的按钮。
<Style x:Key="RoundButton" TargetType="Button">
<!-- bla bla -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="0,5,5,0" />
<!-- bla bla -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我可能这个按钮的用户可以指定CornerRadius吗?我可以使用TemplateBinding吗?但是我应该在哪里绑定? (到标签?)
答案 0 :(得分:6)
除了Kent的建议之外,您还可以创建一个附加属性来定义按钮上的CornerRadius,并绑定到模板中的该属性
答案 1 :(得分:4)
为了使用TemplateBinding
,模板化控件(Button
)上必须有一个属性(在本例中)。 Button
没有CornerRadius
或同等属性,因此您的选项为:
Tag
)以存储此信息。这样做更快,但缺乏类型安全性,难以维护,并且阻止了该属性的其他用途。Button
并添加您需要的属性,然后为该子类提供模板。这需要更长的时间,但为您控制的消费者带来更好的体验。答案 2 :(得分:1)
按钮类型没有CornerRadius的属性,因此无法进行模板化。我认为最简单的方法是创建一个继承自Button的新类,并为CornerRadius添加一个新的依赖项属性。像这样:
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication3
{
public class RoundedButton:Button
{
public CornerRadius CornerRadius
{
get { return (CornerRadius) GetValue(CornerRadiusProperty); }
set { SetValue(CornerRadiusProperty, value); }
}
public static readonly DependencyProperty CornerRadiusProperty =
DependencyProperty.Register("CornerRadius", typeof (CornerRadius),
typeof (RoundedButton), new UIPropertyMetadata());
}
}
在xaml中你可以使用它:
<Local:RoundedButton
Style="{DynamicResource RoundButton}"
Width="64" Height="32"
Content="Hello"
CornerRadius="1,5,10,5"
Background="#FF9CFFD5" />
绑定到CornerRadius的模板现在可以正常运行。