我有UserControl
<UserControl x:Class="CustomCtrl.MyButton">
<Button x:Name="Btn" />
</UserControl>
我在UserControl
Window
<Window>
<Grid>
<MyButton Background="Aqua" />
</Grid>
</Window>
我想使用我的Background
的属性Btn
和XAML 更改按钮Background
的{{1}}属性。
我尝试添加UserControl
属性
Background
但它没有效果。
相反,如果我使用代码public class MyButton: UserControl
{
public new Brush Background
{
get
{ return Btn.GetValue(BackgroundProperty) as Brush; }
set
{ Btn.SetValue(BackgroundProperty, value); }
}
}
,它就可以了
为什么?我该如何解决这个问题?
答案 0 :(得分:1)
<{1}} ,UserControl.Background
不是自定义控件,您无法控制如何使用此属性。如果要更改一个控件的背景,可以公开新的依赖项属性并将其绑定到UserControls
。
答案 1 :(得分:0)
我认为你有两个选择:
简单的方法,只需将“Btn”背景设置为透明,如下所示:
<UserControl x:Class="CustomCtrl.MyButton">
<Button x:Name="Btn" Background="Transparent"/>
</UserControl>
另一种方法是将按钮的背景颜色绑定到控件的背景颜色:
<UserControl x:Class="CustomCtrl.MyButton" x:Name="control">
<Button x:Name="Btn" Background="{Binding Background, ElementName=control}"/>
</UserControl>
两者都经过测试,似乎有效。
答案 2 :(得分:0)
用
<Window>
<Grid>
<MyButton Background="Aqua" />
</Grid>
</Window>
您正在设置UserControl
的背景颜色。设置您必须的Button
的背景颜色
<UserControl x:Class="CustomCtrl.MyButton">
<Button x:Name="Btn" Background="Aqua" />
</UserControl>
编辑(OP评论后):您无法修改UserControl.Background
,但新属性有效:
public Brush ButtonBackground {
get {
return this.Btn.Background;
}
set {
this.Btn.Background = value;
}
}
然后:
<Window>
<Grid>
<MyButton ButtonBackground="Aqua" />
</Grid>
</Window>