2010-07-15 17 views
13

मेरे पास एक HeaderedContentControl है जिसमें TreeView शामिल है।मैं हेड्रेडकंटेंट नियंत्रण की सामग्री कैसे फैला सकता हूं?

<HeaderedContentControl Header="Steps" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <TreeView Name="WizardSteps" ItemsSource="{Binding WizardSteps}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
      <!-- Hierarchical data templates here --> 
     </TreeView> 
    </HeaderedContentControl> 

हालांकि HeaderedContentControl अपनी मूल ग्रिड के अंदर क्षेत्र को भरने के लिए फैला है, मेरी TreeView नियंत्रण केवल अंतरिक्ष के एक छोटे से हिस्से को उपलब्ध पर है।

मैं अपने हेड्रेडकंटेंट नियंत्रण के सामग्री क्षेत्र को भरने के लिए विस्तार करने के लिए अपना वृक्ष दृश्य कैसे प्राप्त करूं?

<ControlTemplate TargetType="{x:Type HeaderedContentControl}"> 
    <StackPanel> 
     <ContentPresenter ContentSource="Header" /> 
     <ContentPresenter /> 
    </StackPanel> 
</ControlTemplate> 

StackPanel प्रत्येक बच्चे है अपने स्वयं के वांछित ऊंचाई, इसलिए TreeView खिंचाव नहीं होगा करने देता है:

उत्तर

26

HeaderedContentControl के लिए डिफ़ॉल्ट नियंत्रण टेम्पलेट कुछ इस तरह है।

<HeaderedContentControl Header="Steps" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" > 
    <HeaderedContentControl.Template> 
     <ControlTemplate TargetType="HeaderedContentControl"> 
      <DockPanel> 
       <ContentPresenter DockPanel.Dock="Top" ContentSource="Header" /> 
       <ContentPresenter /> 
      </DockPanel> 
     </ControlTemplate> 
    </HeaderedContentControl.Template> 

आप इसे और अधिक पुन: प्रयोज्य बनाना चाहते हैं, एक शैली में टेम्पलेट सेट है और उपयोग VerticalContentAlignment:: आप एक DockPanel का उपयोग करता है एक टेम्पलेट के साथ बदलने सकता

<Style TargetType="HeaderedContentControl"> 
    <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="HeaderedContentControl"> 
       <DockPanel> 
        <ContentPresenter DockPanel.Dock="Top" ContentSource="Header" /> 
        <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> 
       </DockPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

इस तरह, आपके सभी HeaderedContentControls की सामग्री डिफ़ॉल्ट रूप से भर जाएगी, और आप व्यक्तिगत नियंत्रण पर वर्टिकलकंटेंटलाइन सेट करके इसे ओवरराइड कर सकते हैं।

वैकल्पिक रूप से, आप हेड्रेडकंटेंट नियंत्रण के बजाय सीधे डॉकपैनल का उपयोग कर सकते हैं।

+1

आपके विस्तृत स्पष्टीकरण और एक्सएएमएल स्निपेट के लिए धन्यवाद। मुझे लगता है कि मैं सीधे डॉकपैनल का उपयोग कर सकता हूं, लेकिन यह देखने के लिए अच्छा है कि कंट्रोल टेम्पलेट्स एक ही प्रभाव को कैसे प्राप्त कर सकते हैं। – dthrasher

संबंधित मुद्दे