Нарисуйте текст на фигуре в wpf - PullRequest
0 голосов
/ 04 ноября 2011

Некоторым из вас этот вопрос может показаться скучным, но я до сих пор не очень привык к рисованию wpf.Я хочу добавить отформатированный текст в прямоугольник, который перемещается по холсту, и у меня есть подсказка для переопределения метода UIElement.OnRender.Однако я не знаю, должен ли я переопределить класс canvas или класс Shape.В любом правильном случае, что относится к параметру DrawingContext метода, как описано в примере: http://msdn.microsoft.com/en-us/library/bb613560.aspx#FormattedText_Object?

Является ли текст в конечном итоге назначенным для фигуры, или это визуальный временный эффект, который не может двигаться вместе с формой на холсте?

Существуют ли еще какие-либо эффективные способы нанесения текста на фигуру?

Ответы [ 3 ]

1 голос
/ 04 ноября 2011

Вы можете нарисовать текст поверх прямоугольника, поместив оба элемента управления в родительский контейнер, позволяющий перекрывать элементы управления, такие как Grid или Canvas

<Grid>
    <Rectangle Fill="Red" Stroke="Black" 
               HorizontalAlignement="Stretch" VerticalAlignment="Stretch" />

    <Label Content="Test"
           HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

. Затем можно применитьКакое бы форматирование вы не выбрали для Label, Rectangle, и вы можете перемещать группу, устанавливая положение Grid

0 голосов
/ 04 ноября 2011

Вы также можете захотеть взглянуть на свойство ZIndex, которое можно установить для таких объектов, как Grid (например, <Rectangle Background="Black" Grid.ZIndex = 99 /> поместит его поверх других элементов), что полезно для создания таких вещей, как «загрузка» экранов.*

0 голосов
/ 04 ноября 2011

Ответ Рэйчел верен, хотя вы можете немного его расширить, определив некоторый UserControl как:

А в коде позади определите 1. Метка: String DependencyProperty, Shape: UIElement DependencyProperty.

Обработка события изменения формы и вызов:

private void UpdateShape()
{
    grdShapeContainer.Children.Clear();
    if(this.Shape != null)
    {
        grdShapeContainer.Children.Add(this.Shape);
    }
}

Таким образом, вы сможете сделать вещи динамичными.

С уважением, Артак

...