2012-11-08 24 views
1

我正在尋找一個等效於TreeView.HideSelection = false的WPF TreeView。有人有想法嗎?TreeView.HideSelection = false - 在WPF中相當於

+0

嘗試通過此鏈接(它聽起來類似於我)http://stackoverflow.com/questions/7905881/wpf-treeviewitem-toggle-button-visibility。 – wjhguitarman

+0

你到底需要做什麼?我不知道TreeView.HideSelection會是什麼。它是winforms嗎? –

回答

1

如果我的TreeView.HideSelection的理解是正確的,請將您的資源下列內容:

<ControlTemplate x:Key="StaysHighlightedTreeViewItemTemplate" 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}}"> 
      <ToggleButton.Style> 
       <Style TargetType="{x:Type ToggleButton}"> 
        <Setter Property="Focusable" Value="False"/> 
        <Setter Property="Width" Value="16"/> 
        <Setter Property="Height" Value="16"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type ToggleButton}"> 
           <Border Background="Transparent" Height="16" Padding="5" Width="16"> 
            <Path x:Name="ExpandPath" Data="M0,0 L0,6 L6,0 z" Fill="Transparent" Stroke="#FF989898"> 
             <Path.RenderTransform> 
              <RotateTransform Angle="135" CenterY="3" CenterX="3"/> 
             </Path.RenderTransform> 
            </Path> 
           </Border> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsMouseOver" Value="True"> 
             <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF1BBBFA"/> 
             <Setter Property="Fill" TargetName="ExpandPath" Value="Transparent"/> 
            </Trigger> 
            <Trigger Property="IsChecked" Value="True"> 
             <Setter Property="RenderTransform" TargetName="ExpandPath"> 
              <Setter.Value> 
               <RotateTransform Angle="180" CenterY="3" CenterX="3"/> 
              </Setter.Value> 
             </Setter> 
             <Setter Property="Fill" TargetName="ExpandPath" Value="#FF595959"/> 
             <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF262626"/> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ToggleButton.Style> 
     </ToggleButton> 
     <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" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
     </Border> 
     <ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/> 
    </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> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

<Style x:Key="StaysHighlightedTreeViewItem" TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="Template" Value="{StaticResource StaysHighlightedTreeViewItemTemplate}"/> 
</Style> 

然後使用樣式像這樣:

<TreeView ItemContainerStyle="{StaticResource StaysHighlightedTreeViewItem}" /> 

默認控件模板具有以下觸發:

<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> 

這改變了所選項目的突出顯示n選擇不是主動的(即,沒有鍵盤焦點),通過刪除這個觸發器,即使它沒有焦點時也使用標準突出顯示。