简单的WPF自定义控件 - 如何设置背景颜色?

时间:2010-01-05 03:21:14

标签: wpf xaml colors background controls

我创建了最简单的WPF控件 - 它只是覆盖了OnRender并绘制了一个红色矩形。

但是,仅当将XAML中的背景设置为蓝色时,控件全部为蓝色且不显示红色。如果未设置背景,则红色矩形显示没有问题。

设置背景时,为什么红色矩形不会显示在蓝色背景上?

public class MyWpfControl : Control
{
    protected override void OnRender(DrawingContext drawingContext)
    {
        drawingContext.DrawRectangle(Brushes.Red, null, new Rect(0, 0, 100, 100));
    }
}

3 个答案:

答案 0 :(得分:1)

因为OnRender首先完成,然后渲染背景 - 除非您正在编写非常性能密集型控件,否则您无需重写OnRender。

查看Adam Nathan的书“WPF Unleashed” - 它将帮助您开始使用正确的编写控件的方式并对WPF进行精彩的介绍。把你的Winforms知识留在门口,事情非常不同,这是一种独立的思维方式,而不是Winforms / Win32方法。

答案 1 :(得分:1)

不确定你是怎么得到这个问题的。下面是一个简单的应用程序,它使用MyWpfControl,它工作正常。希望即使问题无法再现,它也会有所帮助。祝你好运。

namespace MyWpfControlDemo
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            WPFControl = new MyWpfControl();
            this.DataContext = this;
        }

        public MyWpfControl WPFControl { get; set; }
    }
}

xaml中的代码。

<Window x:Class="MyWpfControlDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <UserControl Content="{Binding WPFControl}"/>
    </Grid>
</Window>

答案 2 :(得分:0)

删除你设置背景红色,并在重写方法OnRender添加:

drawingContext.DrawRectangle(Brushes.Red,null,new Rect(new Point(0,0),this.RenderSize)); // background