2013-02-21 26 views
0

在TreeView中,我擁有以下資源以在焦點丟失時保持選中的項目。TreeView樣式FullRowSelect並在焦點丟失時保持選中狀態

<TreeView.Resources> 
        <Style TargetType="{x:Type TreeViewItem}"> 
         <Style.Resources> 
          <!-- SelectedItem with focus --> 
          <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
              Opacity=".8" 
              Color="DodgerBlue" /> 
          <!-- SelectedItem without focus --> 
          <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
              Opacity=".3" 
              Color="DodgerBlue" /> 
         </Style.Resources> 
        </Style> 
       </TreeView.Resources> 

但我在資源字典中也有一個模板,用於獲取FullRowSelect樣式。從這裏LeeCampbells文章:Horizontal stretch on TreeViewItems

 <Style BasedOn="{StaticResource {x:Type TreeViewItem}}" TargetType="TreeViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Center" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="TreeViewItem"> 
         <StackPanel> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto" MinWidth="19" /> 
            <ColumnDefinition Width="*" /> 
           </Grid.ColumnDefinitions> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto" /> 
            <RowDefinition /> 
           </Grid.RowDefinitions> 
           <!-- 
            Note that the following do not work, but I believe the top 2 should?! 
            <ToggleButton IsChecked="{TemplateBinding IsExpanded}" ClickMode="Press" Name="Expander"> 
            <ToggleButton IsChecked="{TemplateBinding Property=IsExpanded}" ClickMode="Press" Name="Expander"> 
            <ToggleButton IsChecked="{TemplateBinding Path=IsExpanded}" ClickMode="Press" Name="Expander"> 
           --> 
           <ToggleButton Name="Expander" 
               ClickMode="Press" 
               IsChecked="{Binding Path=IsExpanded, 
                    RelativeSource={RelativeSource TemplatedParent}}"> 
            <ToggleButton.Style> 
             <Style TargetType="ToggleButton"> 
              <Setter Property="UIElement.Focusable" Value="false" /> 
              <Setter Property="FrameworkElement.Width" Value="16" /> 
              <Setter Property="FrameworkElement.Height" Value="16" /> 
              <Setter Property="Control.Template"> 
               <Setter.Value> 
                <ControlTemplate TargetType="ToggleButton"> 
                 <Border Width="16" 
                   Height="16" 
                   Background="#00FFFFFF" 
                   Padding="5,5,5,5"> 
                  <Path Name="ExpandPath" 
                    Fill="#00FFFFFF" 
                    Stroke="#FF989898"> 
                   <Path.Data> 
                    <PathGeometry Figures="M0,0L0,6L6,0z" /> 
                   </Path.Data> 
                   <Path.RenderTransform> 
                    <RotateTransform Angle="135" CenterX="3" CenterY="3" /> 
                   </Path.RenderTransform> 
                  </Path> 
                 </Border> 
                 <ControlTemplate.Triggers> 
                  <Trigger Property="UIElement.IsMouseOver" Value="True"> 
                   <Setter TargetName="ExpandPath" Property="Shape.Stroke" Value="#FF1BBBFA" /> 
                   <Setter TargetName="ExpandPath" Property="Shape.Fill" Value="#00FFFFFF" /> 
                  </Trigger> 
                  <Trigger Property="ToggleButton.IsChecked" Value="True"> 
                   <Setter TargetName="ExpandPath" Property="UIElement.RenderTransform"> 
                    <Setter.Value> 
                     <RotateTransform Angle="180" CenterX="3" CenterY="3" /> 
                    </Setter.Value> 
                   </Setter> 
                   <Setter TargetName="ExpandPath" Property="Shape.Fill" Value="#FF595959" /> 
                   <Setter TargetName="ExpandPath" Property="Shape.Stroke" Value="#FF262626" /> 
                  </Trigger> 
                 </ControlTemplate.Triggers> 
                </ControlTemplate> 
               </Setter.Value> 
              </Setter> 
             </Style> 
            </ToggleButton.Style> 
           </ToggleButton> 
           <Border x:Name="Bd" 
             Grid.Column="1" 
             HorizontalAlignment="Stretch" 
             Background="{TemplateBinding Panel.Background}" 
             BorderBrush="{TemplateBinding Border.BorderBrush}" 
             BorderThickness="{TemplateBinding Border.BorderThickness}" 
             Padding="{TemplateBinding Control.Padding}" 
             SnapsToDevicePixels="True"> 
            <ContentPresenter x:Name="PART_Header" 
                 HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" 
                 Content="{TemplateBinding HeaderedContentControl.Header}" 
                 ContentSource="Header" 
                 ContentStringFormat="{TemplateBinding HeaderedItemsControl.HeaderStringFormat}" 
                 ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" 
                 ContentTemplateSelector="{TemplateBinding HeaderedItemsControl.HeaderTemplateSelector}" 
                 SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> 
           </Border> 
           <ItemsPresenter x:Name="ItemsHost" 
               Grid.Row="1" 
               Grid.Column="1" /> 
          </Grid> 
         </StackPanel> 
         <ControlTemplate.Triggers> 
          <Trigger Property="TreeViewItem.IsExpanded" Value="False"> 
           <Setter TargetName="ItemsHost" Property="UIElement.Visibility" Value="Collapsed" /> 
          </Trigger> 
          <Trigger Property="ItemsControl.HasItems" Value="False"> 
           <Setter TargetName="Expander" Property="UIElement.Visibility" Value="Hidden" /> 
          </Trigger> 
          <Trigger Property="TreeViewItem.IsSelected" Value="True"> 
           <Setter TargetName="Bd" Property="Panel.Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" /> 
           <Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="TreeViewItem.IsSelected" Value="True" /> 
            <Condition Property="Selector.IsSelectionActive" Value="False" /> 
           </MultiTrigger.Conditions> 
           <Setter TargetName="Bd" Property="Panel.Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" /> 
           <Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
          </MultiTrigger> 
          <Trigger Property="UIElement.IsEnabled" Value="False"> 
           <Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 




    </TreeView.ItemContainerStyle> 

</TreeView> 

此刻我似乎不能夠爲這兩個結合起來。也許現在已經太晚了。

我應該在模板中將樣式放在FullRowSelect中並在焦點丟失時保留選擇?

回答

1

取出<Style>標籤圍繞兩個顏色刷定義...換句話說,使顏色畫筆直接在TreeViewResources而不是包裹Style內。

+0

完美地工作。 – 2013-02-22 09:05:54

相關問題