在图标左侧选中了带有图标的WPF TreeView

时间:2016-06-22 07:52:13

标签: c# wpf xaml treeview

我有一个WPF TreeView,我想删除蓝色"选择"将鼠标悬停在图标的左侧。 我希望你明白我的意思:D

这是问题的图片

enter image description here

TreeView由后面的代码填充,我以编程方式构建Item。

TreeViewItem.Header XAML如下所示:

<StackPanel Orientation="Horizontal" ...>
    <Image ... />
    <TextBlock .../>
</StackPanel>

3 个答案:

答案 0 :(得分:1)

这就像一个解决方法,它不是一个好的解决方案:

<StackPanel Orientation="Horizontal" Margin="-1,0,0,0">  
   <Image Source="/Images/yourImage.jpg" Height="30" Width="30"/>
   <TextBlock Text="Hey"/>
</StackPanel>

但是,最好使用HierarchicalDataTemplate

<TreeView  ItemsSource="{Binding Leafs}">                                
  <TreeView.Resources>                    
    <HierarchicalDataTemplate DataType="{x:Type vm:LeafViewModel}" ItemsSource="{Binding Children}">
       <ContentControl Content="{Binding }">
         <ContentControl.Style>
           <Style TargetType="{x:Type ContentControl}">
              <Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}"/>
           </Style>
         </ContentControl.Style>
       </ContentControl>                        
   </HierarchicalDataTemplate>
 </TreeView.Resources>            
</TreeView>

及其HierarchicalDataTemplate

<HierarchicalDataTemplate x:Key="DefaultTemplate" DataType="{x:Type vm:LeafViewModel}" ItemsSource="{Binding Children}">
  <Border Tag="{Binding DataContext, RelativeSource={RelativeSource Self}}" Background="Transparent">
     <StackPanel Orientation="Horizontal">
        <Label VerticalAlignment="Center" FontFamily="WingDings" Content="1"/>
        <CheckBox IsChecked="{Binding IsCheckedFoo}"/>
        <TextBlock Name="leafTxtBox" Text="{Binding LeafName}" Tag="{Binding DataContext, RelativeSource={RelativeSource Self}}" Background="Transparent"/>
     </StackPanel>
  </Border>
</HierarchicalDataTemplate>

关于如何使用TreeView without violating MVVM rules is by Josh Smith.

的最佳文章

答案 1 :(得分:0)

TreeView将项目包装到TreeViewItem容器中。 TreeViewItem有Padding 1,0,0,0,可以通过Style

删除
<TreeView.Resources>
    <Style TargetType="TreeViewItem">
        <Setter Property="Padding" Value="0"/>
    </Style>
</TreeView.Resources>

答案 2 :(得分:0)

有4个画笔通常与此对应,并由TreeViewItem的默认模板

使用

键:

HighlightBrushKey - 焦点背景。

HighlightTextBrushKey - 具有焦点的前景。

InactiveSelectionHighlightBrushKey - 无焦点的背景。

InactiveSelectionHighlightTextBrushKey - 没有焦点的前景。

根据您的需要覆盖它们,因为您的要求会像这样做得很好:

<TreeView>
  <TreeView.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                      Color="Transparent" />
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
                      Color="Black" />
    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
                      Color="Transparent" />
    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}"
                      Color="Black" />
  </TreeView.Resources>
</TreeView>