我创建了最简单的WPF控件 - 它只是覆盖了OnRender并绘制了一个红色矩形。
但是,仅当将XAML中的背景设置为蓝色时,控件全部为蓝色且不显示红色。如果未设置背景,则红色矩形显示没有问题。
设置背景时,为什么红色矩形不会显示在蓝色背景上?
public class MyWpfControl : Control
{
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawRectangle(Brushes.Red, null, new Rect(0, 0, 100, 100));
}
}
答案 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