代码之家  ›  专栏  ›  技术社区  ›  whitneyland

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

  •  2
  • whitneyland  · 技术社区  · 15 年前

    我已经创建了最简单的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 回复  |  直到 15 年前
        1
  •  1
  •   Ana Betts    15 年前

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

    查看AdamNathan的书“wpf unleashed”——它将帮助您开始正确的控件编写方法,并对wpf进行很好的介绍。把你的Winforms知识留在门口,事情是 非常 与winforms/win32方法不同,它是一种独立的思维方式。

        2
  •  1
  •   ping    15 年前

    不知道你是怎么搞到这个问题的。下面是一个使用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>
    
        3
  •  0
  •   Олег Ладыко    7 年前

    删除设置背景红的设置,并在render的重写方法中添加:

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