2010-08-29 4 views

ответ

30

Прямоугольник не имеет никакого содержания ребенка, так что вам нужно будет поставить как контроль внутри другой панели, такие как сетка:

<Grid> 
    <Rectangle Stroke="Red" Fill="Blue"/> 
    <TextBlock>some text</TextBlock> 
</Grid> 

Вы можете также использовать Пограничный контроль, который будет принимать один ребенок и нарисовать прямоугольник вокруг него:

<Border BorderBrush="Red" BorderThickness="1" Background="Blue"> 
    <TextBlock>some text</TextBlock> 
</Border> 

вы говорите, что «динамический прямоугольник», так что это звучит, как вы делаете это в коде. Эквивалент C# будет выглядеть примерно так:

var grid = new Grid(); 
grid.Children.Add(new Rectangle() { Stroke = Brushes.Red, Fill = Brushes.Blue }); 
grid.Children.Add(new TextBlock() { Text = "some text" }); 
panel.Children.Add(grid); 
// or 
panel.Children.Add(new Border() 
{ 
    BorderBrush = Brushes.Red, 
    BorderThickness = new Thickness(1), 
    Background = Brushes.Blue, 
    Child = new TextBlock() { Text = "some text" }, 
}); 

Но если вы хотите динамический список прямоугольников, вы, вероятно, следует использовать ItemsControl:

<ItemsControl ItemsSource="{Binding}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="Red" BorderThickness="1" Background="Blue"> 
       <TextBlock Text="{Binding Text}"/> 
      </Border> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Если установить DataContext в список объектов , этот XAML создаст Border с TextBlock для каждого из них с текстом, установленным в свойство Text на объекте.

+1

Не могли бы вы предоставить некоторые фрагменты кода для привязки Datacontext Itemcontrol. – Lalchand

1

Вам необходимо добавить текстовый элемент управления к вашему StackPanel, например Label или TextBlock.

+0

Мне нужно добавить текст внутри Rectangle. Как добавить ярлык в прямоугольник. – Lalchand

2

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

Rectangle r = new Rectangle(); 
r.Stroke = Brushes.Blue; 
r.StrokeThickness = 5; 
r.SetValue(Grid.ColumnProperty, 1); 
r.VerticalAlignment = VerticalAlignment.Top; 
r.HorizontalAlignment = HorizontalAlignment.Left; 
r.Margin = new Thickness(0); 
r.Width = 200; 
r.Height = 200; 
r.RenderTransform = new TranslateTransform(100, 100); 
TextBlock TB = new TextBlock(); 
TB.Text = "Some Text to fill"; 
//The next two magical lines create a special brush that contains a bitmap rendering of the UI element that can then be used like any other brush and its in hardware and is almost the text book example for utilizing all hardware rending performances in WPF unleashed 4.5 
BitmapCacheBrush bcb = new BitmapCacheBrush(TB); 
r.Fill = bcb; 
MyCanvas.Children.Add(r); 
Смежные вопросы