2012-11-30 34 views
7

Treeview của tôi về cơ bản có các nút "thư mục" và một cấp bên dưới các mục KHÔNG chứa các mục khác.WPF Chế độ xem dạng cây, cách thay đổi tỷ lệ hiển thị

Không cần có khoảng trống cho biểu tượng mở rộng/thu gọn (ở cấp 2). Tôi có thể từ bỏ không gian biểu tượng này và do đó làm giảm sự chú ý. Các mục (trong ví dụ "sân bay") sẽ được dịch chuyển một số pixel sang trái.

Example tree view

Chú ý: Về cơ bản tìm kiếm các giải pháp mã (C#), không phải là phiên bản XAML.

Trả lời

10

Thực sự điều bạn muốn làm là chỉnh sửa HierarchicalDataTemplate và thay đổi cách hoạt động của nó. Trang sau, có chế độ xem cao cấp khá tốt về chỉnh sửa Hierarchical Data Template.

Tôi cũng đã tìm thấy this one là khá tốt để bắt đầu. Mặc dù không phải trang nào cụ thể nói phải làm gì, về cơ bản bạn đang thay đổi thuộc tính bố cục trong trình bày mặt hàng.

Chỉnh sửa

Rất tiếc, tôi đã không chính xác. Không phải HierarchicalDataTemplate, nhưng mẫu TreeViewItem.

Xem bên dưới để biết ví dụ. Đây chỉ là cách đơn giản nhất để làm điều đó nếu bạn BIẾT rằng sẽ không có bất kỳ nút cấp thứ ba nào.

Đặc biệt chú ý đến phần tử ItemsPresenter có tên ItemsHost. Nó có biên độ -12,0,0,0. Điều đó có nghĩa rằng lề trái của nó là âm và do đó tràn ra khỏi cột lưới có chứa nó theo hướng trái. Do đó tất cả các nút con sẽ được kéo về bên trái một chút. Nếu bạn có nút cấp thứ ba trong tương lai, chúng cũng sẽ được kéo sang trái. Nếu bạn không muốn điều đó, thì bạn sẽ phải cung cấp các mẫu khác nhau cho các cấp độ nút khác nhau. Nhưng điều đó nằm ngoài phạm vi của câu trả lời này.

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