2016-04-07 38 views
1

我有一个usercontrol,其中包含一个椭圆内的画布。我在另一个窗口中使用此控件,当我设置背景颜色时,我只想更改椭圆的背景。如何在不更改画布(父)背景颜色的情况下更改椭圆(子)背景?如何更改子控件的背景颜色xaml

+0

EllipseFill财产上MyUserControl我在画布上多了一个控制。 。在xaml中设置背景颜色时如何在不更改画布背景的情况下更改椭圆背景。背景=“红色” – Prathap

+0

您可以将它全部放入ContentControl样式模板中并将模板的Ellipse填充绑定到模板,因此当您使用它时,它只会是一行,您只需将属性设置在任何位置用它。这也消除了重复的代码。 –

+0

坚持。为什么不 work? (我添加了一些尺寸进行测试)。 – sous2817

回答

2

1.将DependencyProperty添加到您的MyUserControl的代码隐藏中。

注意Register方法的第三个参数是无论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 XAML文件的引用和UserControl的命名空间其中MyUserControl定义:

xmlns:local="clr-namespace:WpfApplication1" 

3.将EllipseFill属性绑定到在MyUserControl上定义的依赖项属性。

请注意使用MyUserControl参数的AncestorTypeRelativeSource绑定。

<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> 

4.设置在主Window

<local:MyUserControl EllipseFill="Red"/> 
+0

感谢您的回复。我会尝试 – Prathap

+0

谢谢@詹姆斯杜达,它运作良好,现在我有疑问。我试过clr属性,它也可以。为什么我们在这里使用依赖属性? – Prathap

+0

你是对的,在xaml中显式设置EllipseFill属性不需要依赖属性。如果你希望像这样绑定属性,那么它是必需的:'' –