2010-08-29 30 views

Trả lời

30

Một Rectangle không có bất kỳ nội dung đứa trẻ, vì vậy bạn sẽ cần phải đặt cả hai điều khiển bên trong bảng điều khiển khác, chẳng hạn như một mạng lưới:

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

Bạn cũng có thể sử dụng một điều khiển Biên phòng, trong đó sẽ đưa một đứa trẻ và vẽ một hình chữ nhật xung quanh nó:

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

Bạn nói "hình chữ nhật động", vì vậy có vẻ như bạn đang làm điều này trong mã. Tương đương C# sẽ giống như thế này:

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" }, 
}); 

Nhưng nếu bạn muốn có một danh sách năng động của hình chữ nhật, có lẽ bạn nên sử dụng một ItemsControl:

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

Nếu bạn đặt DataContext vào một danh sách các đối tượng , XAML này sẽ tạo ra một Border với một TextBlock cho mỗi một văn bản được đặt thành thuộc tính Text trên đối tượng.

+1

Bạn có thể vui lòng cung cấp một số đoạn mã cho Ràng buộc Datacontext của Itemcontrol. – Lalchand

1

Bạn cần thêm điều khiển văn bản vào StackPanel, chẳng hạn như Label hoặc TextBlock.

+0

Tôi cần thêm văn bản bên trong Rectangle.How tôi có thể thêm Nhãn vào hình chữ nhật. – Lalchand

2

Trước hết bạn có thể làm điều này, nhưng không phải bằng cách thêm điều khiển. Và có một lý do rất tốt để làm điều này, cho dựng hình phần cứng tốc độ cao. Bạn có thể tạo một brush đặc biệt từ một phần tử UI lưu trữ chính nó trong phần cứng và điền vào hình chữ nhật với phần cứng này, và nó cực kỳ nhanh. Tôi sẽ chỉ hiển thị mã phía sau bởi vì đó là ví dụ tôi đã tự tay

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); 
Các vấn đề liên quan