如何控制擴展的TreeViewItems所使用的水平空間,使樹視圖占用更少的空間?是否可以僅通過樣式設計來完成,還是必須是一個完全重新制作的樹狀視圖來控制這些樣式屬性?
uj5u.com熱心網友回復:
你看到的專案是由父級TreeViewItem的ItemsPresenter布局的。這意味著要改變子專案的縮進,你必須改變ItemsPresenter在布局中的位置。
要做到這一點,您必須覆寫TreeViewItem的默認ControlTemplate。找到ItemsPresenter并給它一個負的左Margin以減少縮進,或一個正的左邊緣以增加子專案的縮進。
下面的樣式取自Microsoft Docs: TreeView ControlTemplate Example。在那里你可以找到以下Style所依賴的所有資源。
關鍵是要在名為 "ItemsHost "的ItemsPresenter上設定一個負的左Margin:
<ItemsPresenter x:Name="ItemsHost"/span>
...
Margin="-12,0,0,0" />
完整的TreeViewItemStyle(不包括資源):
<Style x:Key="{x:Type TreeViewItem}"
TargetType="{x:Type TreeViewItem}">/span>
<Setter Property="Background"/span>
Value="透明" />
<Setter Property="HorizontalContentAlignment"
Value="{Binding Path=HorizontalContentAlignment,
RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
<Setter Property=" VerticalContentAlignment"
Value="{Binding Path=VerticalContentAlignment,
RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}" />
<Setter Property="Padding"/span>
Value="1,0,0,0" />
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />/span>
<Setter Property="FocusVisualStyle"
Value="{StaticResource TreeViewItemFocusVisual}"/span> />
<Setter Property="Template">/span>
<Setter.Value>/span>
<ControlTemplate TargetType="{x:Type TreeViewItem}"/span>>
<Grid>/span>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="19"
Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*"/span> />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>/span>
<RowDefinition Height="Auto"/span> />
<RowDefinition />
</Grid.RowDefinitions>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Selected">
<Storyboard>/span>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Bd"
Storyboard.TargetProperty="(面板.背景)。
(SolidColorBrush.Color)"。
>
<EasingColorKeyFrame KeyTime="0"/span>
Value="{StaticResource SelectedBackgroundColor}"/span> />
</ColorAnimationUsingKeyFrames>
</Storyboard>/span>
</VisualState>/span>
<VisualState x:Name="Unselected" />
<VisualState x:Name="SelectedInactive"/span>>
<Storyboard>/span>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Bd"
Storyboard.TargetProperty="(面板.背景)。
(SolidColorBrush.Color)">。
<EasingColorKeyFrame KeyTime="0"/span>
Value="{StaticResource SelectedUnfocusedColor}"/span> />
</ColorAnimationUsingKeyFrames>
</Storyboard>/span>
</VisualState>/span>
</VisualStateGroup>/span>
<VisualStateGroup x:Name="ExpansionStates">
<VisualState x:Name="Expanded"/span>>
<Storyboard>/span>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
Storyboard.TargetName="ItemsHost">。
<DiscreteObjectKeyFrame KeyTime="0">
Value="{x:Static Visibility.Visible}"/span> />
</ObjectAnimationUsingKeyFrames>/span>
</Storyboard>/span>
</VisualState>/span>
<VisualState x:Name="Collapsed" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ToggleButton x:Name="Expander"
Style="{StaticResource ExpandCollapseToggleStyle}"
ClickMode="Press"。
IsChecked="{Binding IsExpanded,
RelativeSource={RelativeSource TemplatedParent}}"/span>/>
<Border x:Name="Bd"/span>
Grid.Column="1"/span>
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<ContentPresenter x:Name="PART_Header"/span>
ContentSource="Header"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/span>/>
</Border>
<!--子專案的主機-->
<ItemsPresenter x:Name="ItemsHost"
Grid.Row="1"/span>
Grid.Column="1"/span>
Grid.ColumnSpan="2"/span>
Visibility="Collapsed"
Margin="-12,0,0,0"/span> />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasItems"
Value="false">>
<Setter TargetName="Expander"
屬性="Visibility"
Value="Hidden" />
</Trigger>
<MultiTrigger>/span>
<MultiTrigger.Conditions>/span>
<Condition Property="HasHeader"
Value="false" />>
<Condition Property="Width" >。
Value="Auto" />
</MultiTrigger.Conditions>
<Setter TargetName="PART_Header"
屬性="MinWidth"。
Value="75"/span> />
</MultiTrigger>
<MultiTrigger>/span>
<MultiTrigger.Conditions>/span>
<Condition Property="HasHeader"
Value="false" />>
<Condition Property="Height">
Value="Auto" />
</MultiTrigger.Conditions>
<Setter TargetName="PART_Header"
屬性="最小高度"
Value="19"/span> />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>/span>
</Setter>/span>
</Style>
uj5u.com熱心網友回復:
你需要覆寫默認的模板。見我在相關地方的評論。在樣式ExpandCollapseToggleStyle中修改切換按鈕的Width,在Template的TreeViewItem中,你應該修改Grid中第一欄的MinWidth。
<TreeView.Resources>
<Color x: Key="SelectedBackgroundColor">#FFC5CBF9</Color>
<Color x: Key="SelectedUnfocusedColor">#FFDDDDDD</Color>
<Color x: Key="GlyphColor">#FF444444</Color>
<Color x:Key="GlyphMouseOver"/span>>sc#1, 0. 004391443, 0.002428215, 0.242281124</Color>
<Style x: Key="ExpandCollapseToggleStyle" TargetType="ToggleButton">/span>
< Setter Property="Focusable" Value="False" />
<Setter Property="Template"/span>>
<Setter.Value>/span>
<ControlTemplate TargetType="ToggleButton"/span>>
< Grid Width="15" Height="13" Background="透明"> <! --修改Width來操作縮進!!! -->
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CheckStates">/span>
<VisualState x:Name="Checked"/span>>
<Storyboard>/span>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement. Visibility)" Storyboard.TargetName="Collapsed">
< DiscreteObjectKeyFrame KeyTime="0" Value="{x。 靜態 可見性。 Hidden}" />
</ObjectAnimationUsingKeyFrames>/span>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement)。 Visibility)" Storyboard.TargetName="Expanded">
< DiscreteObjectKeyFrame KeyTime="0" Value="{x。 靜態的可見性。 Visible}" />
</ObjectAnimationUsingKeyFrames>/span>
</Storyboard>/span>
</VisualState>/span>
<VisualState x:Name="unchecked" />
<VisualState x:Name="Indeterminate" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Path x: 名稱="折疊" HorizontalAlignment="左" VerticalAlignment="Center" Margin="1。 1,1,1" Data="M 4 0 L 8 4 L 4 8 Z">
<Path.Fill>
<SolidColorBrush Color="{DynamicResource GlyphColor}"/span> />
</Path.Fill>
</Path>/span>
<Path x: Name="Expanded" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="1。 1,1,1" Data="M 0 4 L 8 4 L 4 8 Z" Visibility="Hidden"/span>>
<Path.Fill>
<SolidColorBrush Color="{DynamicResource GlyphColor}"/span> />
</Path.Fill>
</Path>/span>
</Grid>/span>
</ControlTemplate>/span>
</Setter.Value>/span>
</Setter>/span>
</Style>>
<Style TargetType="TreeViewItem">/span>
<Setter Property="Template" >/span>
<Setter.Value>/span>
<ControlTemplate TargetType="TreeViewItem"/span>>
<Grid>/span>
<Grid.ColumnDefinitions>
< ColumnDefinition MinWidth="19"/span> Width="Auto"/span> /> <! --請修改MinWidth來操作縮進!! -->
<ColumnDefinition Width="Auto"/span> />
<ColumnDefinition Width="*"/span> />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>/span>
<RowDefinition Height="Auto"/span> />
<RowDefinition />
</Grid.RowDefinitions>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Selected">
<Storyboard>/span>
<ColorAnimationUsingKeyFrames Storyboard. TargetName="Bd" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
< EasingColorKeyFrame KeyTime="0" Value="{StaticResource SelectedBackgroundColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>/span>
</VisualState>/span>
<VisualState x:Name="Unselected" />
<VisualState x:Name="SelectedInactive"/span>>
<Storyboard>/span>
<ColorAnimationUsingKeyFrames Storyboard. TargetName="Bd" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">/span>
< EasingColorKeyFrame KeyTime="0" Value="{StaticResource SelectedUnfocusedColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>/span>
</VisualState>/span>
</VisualStateGroup>/span>
<VisualStateGroup x:Name="ExpansionStates">
<VisualState x:Name="Expanded"/span>>
<Storyboard>/span>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement. Visibility)" Storyboard.TargetName="ItemsHost">
< DiscreteObjectKeyFrame KeyTime="0" Value="{x。 靜態的可見性。 Visible}" />
</ObjectAnimationUsingKeyFrames>/span>
</Storyboard>/span>
</VisualState>/span>
<VisualState x:Name="Collapsed" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ToggleButton x: Name="Expander" Style="{StaticResource ExpandCollapseToggleStyle}" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"/>
<Border x:Name="Bd"/span>
Grid.Column="1"/span>
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"/span>>
<ContentPresenter x: 名稱="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
<ItemsPresenter x:Name="ItemsHost"
Grid.Row="1"/span>
Grid.Column="1"/span>
Grid.ColumnSpan="2"/span>
Visibility="Collapsed" />
</Grid>
<ControlTemplate.Triggers>
< Trigger Property="HasItems" Value="false">
< Setter TargetName="Expander" 屬性="可見性" 值="隱藏" />
</Trigger>
<MultiTrigger>/span>
<MultiTrigger.Conditions>/span>
< 條件 屬性="HasHeader" 值="false" />
< 條件 屬性="Width" 值="Auto" />
</MultiTrigger.Conditions>
< Setter TargetName="PART_Header" 屬性="MinWidth" 值="75" />
</MultiTrigger>
<MultiTrigger>/span>
<MultiTrigger.Conditions>/span>
< 條件 屬性="HasHeader" 值="false" />
< 條件 屬性="高度" 值="自動" />
</MultiTrigger.Conditions>
< Setter TargetName="PART_Header" 屬性="MinHeight" 值="19" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>/span>
</Setter>/span>
</Style>>
</TreeView.Resources>/span>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324485.html
標籤:

