我尝试做的是将控件包装在边框中而不更改其默认外观,也无需创建自定义控件。
我想做相同的事情:
<Border BorderBrush="Red" BorderThickness="3">
<Button>Hello!</Button>
</Border>
只是对任何控制,而不必实际包装Border
中的所有内容。我试图通过使用以下内容修改样式中的Template
来实现此目的:
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="Red" BorderThickness="3">
<ContentPresenter />
</Border>
</ControlTemplate>
这会成功添加边框,但也会清除Button
上的任何其他样式。我希望它看起来像一个按钮,周围有一个额外的边框。
有什么想法吗?
答案 0 :(得分:2)
是否需要验证?一个不错的选择是在Adorner图层上绘制边框。
答案 1 :(得分:1)
样式可以继承(使用BasedOn属性),但是您正在处理模板,因此您需要获取当前按钮模板的副本并编辑自己的副本。执行此操作的选项包括:
答案 2 :(得分:0)
我的假设:
我的解决方案是使用附加的依赖项属性。设置属性后,您将从逻辑树中获取父级。然后,我们将孩子换成包裹在边境的孩子。
当然,你可以为不同的父母进一步扩展这一点。
GitHub的解决方案是http://github.com/RookieOne/WrapControlInBorder
这是一个小代码片段:
var parent = LogicalTreeHelper.GetParent(elementToWrap);
var panel = parent as Panel;
if (panel != null)
{
panel.Children.Remove(elementToWrap);
var border = Wrap(elementToWrap);
panel.Children.Add(border);
return;
}
var contentParent = parent as ContentControl;
if (contentParent != null)
{
contentParent.Content = null;
var border = Wrap(elementToWrap);
contentParent.Content = border;
return;
}