• WPF笔记:WPF自定义treeview样式及数据绑定


    1. 定义treeview 展开按钮(togglebutton)样式,创建资源:
      <Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton">
              <Setter Property="Focusable" Value="False"/>
              <Setter Property="Template">
                  <Setter.Value>
                      <ControlTemplate TargetType="ToggleButton">
                          <Grid Width="25" Height="23" SnapsToDevicePixels="True">
                              
                              <Rectangle Width="13" Height="13" 
                          Stroke="#919191" SnapsToDevicePixels="true">
                                  <Rectangle.Fill>
                                      <LinearGradientBrush EndPoint="0.5,2" StartPoint="0.5,0">
                                          <GradientStop Color="White" Offset="0"/>
                                          <GradientStop Color="Silver" Offset="0.5"/>
                                          <GradientStop Color="LightGray" Offset="1"/>
                                      </LinearGradientBrush>
                                  </Rectangle.Fill>
                              </Rectangle>
                             
                              <Rectangle x:Name="ExpandPath" Width="1" 
                          Height="5" Stroke="Black" SnapsToDevicePixels="true"/>
                              
                              <Rectangle Width="5" Height="1" 
                          Stroke="Black" SnapsToDevicePixels="true"/>
                          </Grid>
                          <ControlTemplate.Triggers>
                              <Trigger Property="IsChecked" Value="True">
                                  <Setter Property="Visibility"  
                              TargetName="ExpandPath" Value="Collapsed"/>
                              </Trigger>
                          </ControlTemplate.Triggers>
                      </ControlTemplate>
                  </Setter.Value>
              </Setter>
          </Style>

      2.  修改treeviewitem 的controltemplate:

    <TreeView.ItemContainerStyle>
                    
                    <Style TargetType="{x:Type TreeViewItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type TreeViewItem}">
                                    <Grid  >
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition  Width="22"/>
                                            <ColumnDefinition />
                                            
                                        </Grid.ColumnDefinitions>
                                        <Grid.RowDefinitions>
                                            <RowDefinition/>
                                            <RowDefinition/>
                                        </Grid.RowDefinitions>
                                        <Border Grid.ColumnSpan="2" Margin="-1600,0,0,0"  x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"  SnapsToDevicePixels="true"/>
                                        <ToggleButton  x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
                                        <ContentPresenter Grid.Column="1" x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                        <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="#FF404040" />
    
                                            <Setter Property="Background" TargetName="Expander" Value="#FF404040"/>
                                        </Trigger>
                                        <MultiTrigger>
                                            <MultiTrigger.Conditions>
                                                <Condition Property="IsSelected" Value="true"/>
                                                <Condition Property="IsSelectionActive" Value="false"/>
                                            </MultiTrigger.Conditions>
                                            <Setter Property="Background" TargetName="Bd" Value="#FF404040"/>
    
                                            <Setter Property="Background" TargetName="Expander" Value="#FF404040"/>
                                        </MultiTrigger>
                                        <Trigger Property="IsEnabled" Value="false">
                                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                                        </Trigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="IsExpanded" Value="{Binding IsExpanded,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>
                        <Setter Property="IsSelected" Value="{Binding IsSelected,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>
                       
                        
                        <Style.Resources>
                           
                            <!--SelectedItem with focus-->
                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightSkyBlue" Opacity=".5"/>
                            <!--SelectedItem without focus-->
                            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightSkyBlue" Opacity=".5"/>
                        </Style.Resources>
                        
                    </Style>
                </TreeView.ItemContainerStyle>

    3.  创建treeviewitem的数据绑定:

    <TreeView.ItemTemplate>                
                    <HierarchicalDataTemplate ItemsSource="{Binding SubGroups}">
                        <StackPanel PreviewMouseLeftButtonDown="StackPanel_PreviewMouseLeftButtonDown" Orientation="Horizontal"  AllowDrop="True" 
                                     DragLeave="StackPanel_DragLeave" DragEnter="StackPanel_DragEnter"
                                     Drop="StackPanel_Drop" MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"  
                                     ContextMenu="{StaticResource ProtocolTreeMenu}" 
                                     Tag="{Binding DataContext, ElementName=TreeProtocol}"
                                     >
                            
                            <TextBox SelectionBrush="DarkBlue" IsVisibleChanged="TextBox_IsVisibleChanged" Background="Transparent" Text="{Binding Name, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" Width="Auto"
                                       Visibility="{Binding IsRenaming, Converter={StaticResource ShowCvt}}" KeyDown="TextBox_KeyDown" LostFocus="TextBox_LostFocus"></TextBox>
                            <StackPanel Orientation="Horizontal" Visibility="{Binding IsRenaming, Converter={StaticResource HideCvt}}">
                                <Image Source="../Res/file.png" Width="20" Height="20" Visibility="{Binding HasItemData, Converter={StaticResource ShowCvt}}"></Image>
                                <Image Source="../Res/dir.png" Width="20" Height="20" Visibility="{Binding IsDir, Converter={StaticResource ShowCvt}}"></Image>
                                <TextBlock Text="{Binding Name}" Margin="5,0"></TextBlock>
                            </StackPanel>
                            
                        </StackPanel>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>

    效果:

  • 相关阅读:
    MOCK服务小结
    微信收款「商业版」与「个人版」有什么区别?看完这篇你就懂!
    LB 负载均衡的层次结构
    中兴应用之星携手天翼开放平台:让APP开发更简单
    常见面试题之二叉树
    【深入JAVA EE】Spring配置文件解析
    spring-struts-mybatis整合错误集锦
    Redis安装
    Atitit.ati&#160;dwr的原理and设计&#160;attilax&#160;总结&#160;java&#160;php&#160;版本号
    Android UI开发神兵利器之Icon
  • 原文地址:https://www.cnblogs.com/coder-fang/p/9961474.html
Copyright © 2020-2023  润新知