2013-02-21 30 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

相关问题