【问题标题】:How to change the background color of child control xaml如何更改子控件xaml的背景颜色
【发布时间】:2016-04-07 13:05:39
【问题描述】:

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

【问题讨论】:

  • 我在画布中多了一个控件。 。当我在 xaml 中设置背景颜色时,如何在不更改画布背景颜色的情况下更改椭圆背景。背景="红色"
  • 您可以将所有内容放在 ContentControl 样式模板中,然后模板将椭圆的填充绑定到模板,因此当您使用它时,它只是您只需设置属性的一行无论您在哪里使用它。这也消除了重复的代码。
  • 等一下。为什么 不起作用? (我添加了一些尺寸进行测试)。
  • 我刚开始学习这个。我创建了一个用户控件并在 wpf 窗口中使用它。当我设置背景颜色时,它会改变画布的颜色,我只想改变椭圆背景。 。画布背景不应改变。
  • @sous2817,它会工作的。但我使用椭圆和其他控件来创建用户控件。我在一个窗口中使用这个用户控件,我想从那个窗口更改椭圆的背景。就像我在之前的评论中说的那样

标签: wpf xaml wpf-controls


【解决方案1】:

1.在MyUserControl 的代码隐藏中添加DependencyProperty

注意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。为定义MyUserControl 的命名空间添加对主WindowUserControl 的xaml 文件的引用:

xmlns:local="clr-namespace:WpfApplication1"

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

注意MyUserControlRelativeSource 绑定的AncestorType 参数中的使用。

<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 中的MyUserControl 上设置EllipseFill 属性

<local:MyUserControl EllipseFill="Red"/>

【讨论】:

  • 谢谢@James Durda,它运作良好,现在我有疑问。我尝试了 clr 属性,它也可以工作。为什么我们在这里使用依赖属性?
  • 你是对的,在 xaml 中显式设置 EllipseFill 属性不需要依赖属性。如果您希望像这样绑定属性,则需要它:&lt;local:MyUserControl EllipseFill="{Binding FillColor}"/&gt;
猜你喜欢
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多