如何解决将模板属性值绑定到模板化控件属性
| 标题有点模糊,问题是: 我正在通过与自己的模板交换来实现Silverlight 4按钮。是否可以将边框角半径绑定到按钮高度? 例如,用户可以将设计器中的高度设置为30,然后模板内边框的角半径应为15。当高度为50时,角半径应为25,依此类推。 如果可能,我需要一个纯XAML解决方案。 谢谢解决方法
这不是纯Xaml解决方案。最终,您至少需要执行y / 2表达式,而这不是任何现有的基于Xaml的组件当前提供的。
在Vs2010中打开该项目。添加一个新项目... \“ Silverlight模板控件\”将其命名为\“ RoundEndedButton \”。
将源替换为:-
public class RoundEndedButton : Button
{
public RoundEndedButton()
{
this.DefaultStyleKey = typeof(RoundEndedButton);
SizeChanged += new SizeChangedEventHandler(RoundEndedButton_SizeChanged);
}
public static readonly DependencyProperty CornerRadiusProperty =
DependencyProperty.Register(
\"CornerRadius\",typeof(CornerRadius),typeof(RoundEndedButton),new PropertyMetadata(new CornerRadius()));
void RoundEndedButton_SizeChanged(object sender,SizeChangedEventArgs e)
{
SetValue(CornerRadiusProperty,new CornerRadius(e.NewSize.Height / 2));
}
}
在主题/Generic.xaml中修改其默认模板。这是我非常简单的示例:-
<Style TargetType=\"local:RoundEndedButton\">
<Setter Property=\"Template\">
<Setter.Value>
<ControlTemplate TargetType=\"local:RoundEndedButton\">
<Border x:Name=\"Background\"
Background=\"{TemplateBinding Background}\"
CornerRadius=\"{TemplateBinding CornerRadius}\"
BorderThickness=\"{TemplateBinding BorderThickness}\"
BorderBrush=\"{TemplateBinding BorderBrush}\">
<ContentPresenter
x:Name=\"contentPresenter\"
Content=\"{TemplateBinding Content}\"
ContentTemplate=\"{TemplateBinding ContentTemplate}\"
VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"
HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"
Margin=\"{TemplateBinding Padding}\"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
请注意,在模板绑定中使用了额外的CornerRadius
属性。当然,现在您可以切换回混合,将此控件添加到曲面上,并在样式上发挥创意。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。