Простой WPF Custom Control - Как установить цвет фона? - PullRequest
2 голосов
/ 05 января 2010

Я создал самый простой элемент управления 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 ]

1 голос
/ 05 января 2010

Не уверен, как у вас возникла проблема. Ниже приведено простое приложение, которое использует 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>
1 голос
/ 05 января 2010

Поскольку сначала выполняется OnRender, затем выполняется рендеринг фона - если вы не пишете очень элемент управления с высокой производительностью, вам не нужно переопределять OnRender никогда.

Ознакомьтесь с книгой Адама Натана "WPF Unleashed" - она ​​поможет вам правильно выбрать элементы управления и даст отличное представление о WPF. Оставьте свои знания Winforms за дверью, вещи очень отличаются, это другой способ мышления, чем подход Winforms / Win32.

0 голосов
/ 07 сентября 2017

Снимите у вас настройку фона Red, а в метод переопределения OnRender добавьте это:

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