2015-04-24 3 views
1

Я пытаюсь нарисовать нестатический (высота переменной ширины x y) заполненный прямоугольник в WPF. У меня есть опыт работы с Winforms, но я никогда раньше не использовал WPF. Это то, что я сделал бы в WinForm с помощью вызовов GDI +.Программный рисунок рисования нестатического прямоугольника

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.FillRectangle(_brush1, _rect1); 
} 

А также, я бы назвал this.Invalidate() всякий раз, когда я меняю _rect1 свойства.

Все «учебные пособия», которые я видел по этому вопросу, рисуют только статические незаполненные прямоугольники внутри файлов .xaml (или они не упоминают, где код показывает шоу ...).

Я знаю, что работа с WPF по-разному работает, я просто не понимаю, как это сделать. Я нашел similar methodprotected override void OnRender(DrawingContext dc) и попытался добавить это к классу по умолчанию, который я получил, когда сделал свой проект public partial class MainWindow : Window, но на экране ничего не рисуется. Еще одна вещь, которая касается меня, заключается в том, что класс DrawingContext имеет только класс DrawRectangle и нет FillRectangle.

Как я могу сделать что-то подобное эффективно?

ответ

0

Вы не хотите переопределять OnRender в WPF. Технически вы можете, конечно, но это приносит массу проблем, и это обычно не рекомендуется.

Что бы я сделал, у меня есть панель на окне, в идеале - Canvas, а затем создайте объект Rectangle, который затем можно манипулировать с помощью кода (или, лучше всего, с использованием привязки данных). Если вы положите его в Canvas, вы можете изменить его размер и положение, изменив его Width и Height и приложенные свойства Canvas.Left и Canvas.Top.

Не зная своего конкретного сценария, трудно предложить более конкретные советы.

Редактировать: This Связанный с этим вопрос имеет некоторые хорошие ответы и примеры.

+0

Как я могу получить доступ к моему холсту с кодом? и как будет заполняться прямоугольник? – dimitris93

+0

'Rectangle' имеет свойства, такие как' Fill' и 'Stroke', которые определяют цвета. Связанный вопрос имеет хорошие примеры, хотя, если вы новичок в WPF, многие вещи там, вероятно, смутят вас. К сожалению, что вы пытаетесь сделать, это не самая легкая вещь в WPF. – vesan

0

Это не способ использования WPF. У этого есть другая философия создания графики. Но если вы ищете способ, который является аналогом в Windows Forms, как вы могли бы использовать это:

protected override void OnRender(DrawingContext drawingContext) 
{ 
    base.OnRender(drawingContext); 

    Background = Brushes.Transparent; 
    drawingContext.DrawRectangle(
     Brushes.BlueViolet, new Pen(Brushes.Chartreuse, 2), new Rect(10, 10, 1000, 1000)); 
} 

Как вы видите, вы должны установить фон прозрачный.

+0

Я упоминаю в своем вопросе, что хочу сделать рисунок эффективно – dimitris93

+0

Он эффективен, так как он низкий, и поэтому он быстрый. Если вы ищете способ, который эффективен для программиста, вам нужно прочитать об основах WPF: XAML, Shapes, Drawings, DrawingContext. Это очень мощно, но для начала нужно понять это в начале. – Fratyx

Смежные вопросы