2009-09-11 8 views

उत्तर

10

ItemTemplate एक DataTemplate अपने ListBox में आइटम प्रस्तुत करने के लिए प्रयोग किया जाता है निर्दिष्ट करने के लिए प्रयोग किया जाता है। ItemPanelTemplate का उपयोग आपके सूची बॉक्स के बच्चों को व्यवस्थित करने के लिए उपयोग किए गए पैनल को निर्दिष्ट करने के लिए किया जाता है।

उदाहरण के लिए, यदि आपका लिस्टबॉक्स एक अवलोकन करने योग्य चयन से जुड़ा हुआ है तो आपको यह बताए जाने के लिए डेटा टेम्पलेट निर्दिष्ट करना होगा कि प्रत्येक व्यक्ति ऑब्जेक्ट को कैसे प्रस्तुत किया जाए।

<ListBox ItemsSource={Binding Persons}> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel> 
     <TextBlock Text={Binding FirstName}/> 
     <TextBlock Text={Binding LastName}/> 
     <TextBlock Text={Binding Age}/> 
     </StackPanel> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

यह प्रत्येक आइटम को लंबवत रूप से व्यवस्थित करेगा क्योंकि ListBox डिफ़ॉल्ट रूप से एक स्टैकपैनल का उपयोग करता है। आप इस व्यवहार को बदलना चाहते हैं, ItemPanelTemplate संपत्ति का इस्तेमाल किया:

<ListBox> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
    </ItemsPanelTemplate>    
    </ListBox.ItemsPanel> 
</ListBox> 

तुम भी किसी अन्य पैनल के लिए StackPanel बदल सकते हैं (उदाहरण के लिए WrapPanel)।

20

मुझे उदाहरण के द्वारा यह समझाने की कोशिश करते हैं:

<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Border Background="SteelBlue" Padding="5" BorderBrush="Black" 
     BorderThickness="1" Margin="0,2"> 
     <TextBlock Text="{Binding}"/> 
     </Border> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel Background="DarkKhaki"/> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

और परिणाम:

WPF ListBox templates example

ItemTemplate सूची में प्रत्येक आइटम के लेआउट निर्धारित करता है। दूसरी तरफ ItemsPanel पैनल है जिसमें व्यक्तिगत आइटम होंगे। उपर्युक्त परिभाषा को देखते हुए दृश्य पेड़ इस तरह कुछ होगा:

<StackPanel> 
    <Border> 
    <TextBlock Text="Alpha"/> 
    </Border> 
    <Border> 
    <TextBlock Text="Beta"/> 
    </Border> 
    .... 
</StackPanel> 
संबंधित मुद्दे