2012-11-30 12 views
7

मेरा ट्रीव्यूव मूल रूप से "फ़ोल्डर" नोड्स है, और नीचे एक स्तर है जिसमें अन्य आइटम नहीं हैं।डब्ल्यूपीएफ ट्री व्यू, इंडेशन को कैसे बदलें

विस्तार/पतन आइकन के लिए स्थान की आवश्यकता नहीं है (स्तर 2 पर)। क्या मैं इस आइकन की जगह छोड़ सकता हूं और इसलिए संकेत को कम कर सकता हूं। आइटम (उदाहरण में "हवाई अड्डे") को कुछ पिक्सल बाईं ओर स्थानांतरित कर दिया जाएगा।

Example tree view

महत्वपूर्ण: मूल रूप से कोड समाधान (सी #), नहीं XAML संस्करण की तलाश में।

उत्तर

10

वास्तव में आप जो करना चाहते हैं वह है HierarchicalDataTemplate संपादित करें और जिस तरह से व्यवहार करता है उसे बदलें। निम्नलिखित पृष्ठ में Hierarchical Data Template संपादित करने का एक बहुत अच्छा उच्च स्तर दृश्य है।

मुझे this one भी शुरू करने के लिए बहुत अच्छा होने के लिए मिला है। हालांकि पृष्ठों में से कोई भी विशेष रूप से नहीं कहता कि क्या करना है, आप आइटम प्रस्तुतकर्ता में लेआउट गुणों को अनिवार्य रूप से बदल रहे हैं।

संपादित करें

ओह, मैं गलत था। HierarchicalDataTemplate नहीं, लेकिन TreeViewItem टेम्पलेट।

उदाहरण के लिए नीचे देखें। यदि आप जानते हैं कि कोई तीसरा स्तर नोड्स नहीं होने वाला है तो यह करने का यह सबसे आसान तरीका है।

आइटमहोस्ट नामक आइटम प्रदाता तत्व पर विशेष ध्यान दें। इसमें -12,0,0,0 का मार्जिन है। इसका मतलब है कि इसका बायां मार्जिन नकारात्मक है और इस प्रकार बाएं दिशा में युक्त ग्रिड कॉलम से बाहर फैलता है। इस प्रकार सभी बच्चे नोड्स को बाईं ओर खींच लिया जाएगा। यदि भविष्य में आपके पास तीसरे स्तर के नोड्स हैं, तो उन्हें बाईं ओर खींच लिया जाएगा। यदि आप इसे नहीं चाहते हैं, तो आपको नोड्स के विभिन्न स्तरों के लिए विभिन्न टेम्पलेट्स की आपूर्ति करनी होगी। लेकिन यह इस जवाब के दायरे से बाहर है।

<Style x:Key="TreeViewItemStyle1" TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition MinWidth="19" Width="Auto"/> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="*"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition/> 
        </Grid.RowDefinitions> 
        <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/> 
        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
         <ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </Border> 
        <ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1" Margin="-12,0,0,0"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsExpanded" Value="false"> 
         <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/> 
        </Trigger> 
        <Trigger Property="HasItems" Value="false"> 
         <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
        </Trigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="true"/> 
          <Condition Property="IsSelectionActive" Value="false"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
        </MultiTrigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true"> 
      <Setter Property="ItemsPanel"> 
       <Setter.Value> 
        <ItemsPanelTemplate> 
         <VirtualizingStackPanel/> 
        </ItemsPanelTemplate> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
संबंधित मुद्दे