2010-08-29 15 views
12

में पाठ जोड़ने की आवश्यकता है मैं गतिशील आयताकार बना रहा हूं और StackPanel में जोड़ रहा हूं। मुझे प्रत्येक आयत में पाठ जोड़ने की जरूरत है। मैं उसे कैसे कर सकता हूँ?आयत

उत्तर

30

एक आयत, किसी भी बच्चे को सामग्री नहीं है तो आप इस तरह के एक ग्रिड के रूप में, एक और पैनल के अंदर दोनों नियंत्रण डाल करने के लिए की आवश्यकता होगी:

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

तुम भी एक सीमा नियंत्रण का उपयोग कर सकते है, जो ले जाएगा एक भी बच्चे और इसके चारों ओर एक आयत बनाएं:

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

आप कहते हैं कि "गतिशील आयत", तो यह लगता है कि आप कोड में यह कर रहे हैं। बराबर सी # कुछ इस तरह दिखेगा:

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 सेट करते हैं , यह एक्सएएमएल ऑब्जेक्ट पर टेक्स्ट प्रॉपर्टी पर टेक्स्ट सेट के साथ प्रत्येक के लिए टेक्स्टब्लॉक के साथ एक सीमा बना देगा।

+1

क्या आप आइटम कंट्रोल के डाटाकेंटेक्स्ट को बाध्य करने के लिए कुछ कोड स्निपेट प्रदान कर सकते हैं। – Lalchand

1

आपको अपने स्टैकपैनल, जैसे Label या TextBlock पर टेक्स्ट नियंत्रण जोड़ने की आवश्यकता है।

+0

मुझे आयताकार के अंदर पाठ जोड़ने की आवश्यकता है। मैं आयत में लेबल कैसे जोड़ सकता हूं। – 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); 
संबंधित मुद्दे