我有一个usercontrol,其中包含Canvas中的椭圆。我在另一个窗口中使用此控件,当我设置背景颜色时,我想只更改ellipse的背景。如何更改椭圆(子)背景而不更改画布(父)背景颜色?
答案 0 :(得分:2)
<强> 1。将DependencyProperty
添加到MyUserControl
。
请注意,Register
方法的第3个参数是Type
UserControl
名称。
public Brush EllipseFill
{
get { return (Brush)GetValue(EllipseFillProperty); }
set { SetValue(EllipseFillProperty, value); }
}
public static readonly DependencyProperty EllipseFillProperty =
DependencyProperty.Register("EllipseFill", typeof(Brush), typeof(MyUserControl), new PropertyMetadata(null));
<强> 2。为定义Window
的命名空间添加对主UserControl
和MyUserControl
的xaml文件的引用:
xmlns:local="clr-namespace:WpfApplication1"
第3。将Fill
的{{1}}属性绑定到Ellipse
上定义的依赖项属性。
请注意在MyUserControl
绑定的MyUserControl
参数中使用AncestorType
。
RelativeSource
<强> 4。在主<Viewbox>
<Canvas Width="100" Height="100">
<Ellipse Width="50"
Height="20"
Canvas.Top="50"
Canvas.Left="50"
Fill="{Binding Path=EllipseFill,
RelativeSource= {RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:MyUserControl}}}"
/>
<Rectangle Width="20"
Height="40"
Canvas.Top="10"
Canvas.Left="10"
Fill="Blue"
/>
</Canvas>
</Viewbox>
EllipseFill
上设置MyUserControl
属性
Window