treeview控件(动态数据绑定+整行选择)(WPF)(二)
来源:互联网 发布:大数据服务 编辑:程序博客网 时间:2024/06/10 12:47
上一篇中介绍了动态绑定数据库的方法,本篇中将会介绍整行选择的方法
<local:IndentConverter x:Key="ConverterLoginMarginLeft"/>
<!--treeview控件的样式-->
<PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 Z"/><!--折叠按钮的图片-->
<!--折叠用按钮的风格-->
<Style x:Key="ExpandCollapseToggleStyle" 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" Width="16" Padding="5,5,5,5">
<Path x:Name="ExpandPath" Data="{StaticResource TreeArrow}" Fill="#FF2C81CC" Stroke="#FF2C81CC">
<Path.RenderTransform>
<RotateTransform Angle="135" CenterX="3" CenterY="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="225" CenterY="3" CenterX="3"/>
</Setter.Value>
</Setter>
<Setter Property="Fill" TargetName="ExpandPath" Value="#FF2C81CC"/>
<Setter Property="Stroke" TargetName="ExpandPath" Value="#FF2C81CC"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--树节点的风格-->
<Style x:Key="TreeViewItemStyle" TargetType="{x:Type TreeViewItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="HorizontalContentAlignment"
Value="{Binding HorizontalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="VerticalContentAlignment"
Value="{Binding VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Padding" Value="1,0,0,0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<StackPanel>
<Border x:Name="Bd" CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="True">
<Grid x:Name="grid" Background="{x:Null}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle x:Name="Hover" Grid.ColumnSpan="2"
Stroke="#FFfee69e" StrokeThickness="1"
HorizontalAlignment="Stretch" RadiusX="4" RadiusY="4"
IsHitTestVisible="False" Opacity="0">
<Rectangle.Fill>
<LinearGradientBrush StartPoint=" .5,0" EndPoint=".5,1">
<GradientStop Offset="0" Color="#FFfff2ca"/>
<GradientStop Offset=" 1" Color="#FFfee69e"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle x:Name="Selection" Grid.ColumnSpan="2"
Stroke="#FFd8f0ff" HorizontalAlignment="Stretch"
RadiusX="4" RadiusY="4" IsHitTestVisible="False" Opacity="0">
<Rectangle.Fill>
<LinearGradientBrush >
<GradientStop Offset="0" Color="#ffe5f4ff"/>
<GradientStop Offset=" 1" Color="#FFd8f0ff"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<ToggleButton x:Name="Expander" ClickMode="Press"
IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
Style="{StaticResource ExpandCollapseToggleStyle}"
HorizontalAlignment="Left" VerticalAlignment="Top" Margin=" 0" />
<ContentPresenter x:Name="PART_Header" ContentSource="Header" Grid.Column="1"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
SnapsToDevicePixels="{Binding SnapsToDevicePixels}"/>
</Grid>
</Border>
<ItemsPresenter x:Name="ItemHost"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="false">
<Setter Property="Visibility" TargetName="ItemHost" Value="Collapsed"/>
</Trigger>
<Trigger Property="HasItems" Value="false">
<Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
</Trigger>
<Trigger Property="IsSelected" Value="false">
<Setter Property="Opacity" TargetName="Selection" Value="1"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="true"/>
<Condition Property="IsExpanded" Value=" false"/>
<Condition Property="IsSelected" Value=" true"/>
</MultiTrigger.Conditions>
<Setter Property="Opacity" TargetName="Hover" Value="1"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource ResourceKey{x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
最上面一行使用的IndentConverter是一个类,计算文本位置
using System.Windows.Data;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows;
public class IndentConverter:IValueConverter
{
public double Indent { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double colunwidth = 10;
double left = 0.0;
UIElement element = value as TreeViewItem;
while(element.GetType()!=typeof(TreeView))
{
element = (UIElement)VisualTreeHelper.GetParent(element);
if (element.GetType() == typeof(TreeViewItem))
left += colunwidth;
}
return new Thickness(left, 0, 0, 0);
/*
var item = value as TreeViewItem;
if (item == null)
{
return new Thickness(0);
}
return new Thickness(Indent * item.GetDepth(), 0, 0, 0);*/
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
- treeview控件(动态数据绑定+整行选择)(WPF)(二)
- treeview控件(动态数据绑定+整行选择)(WPF)(一)
- WPF TreeView 的数据绑定(分层)
- TreeVIew控件绑定数据
- TreeVIew控件绑定数据
- WPF数据绑定(二)
- treeview 控件动态绑定数据部分实例代码
- treeview 控件动态绑定数据部分实例代码
- C# treeview 控件动态绑定数据
- TreeView树形控件动态绑定
- C#动态绑定treeview控件
- C#动态绑定treeview控件
- C#动态绑定treeview控件
- WPF 自定义TreeView控件 绑定子列表
- WPF数据绑定!(ListView控件)
- WPF中Treeview绑定数据库数据
- WPF Treeview 无限分级绑定集合数据
- WPF的TreeView数据绑定基础
- Qt之JSON生成与解析
- 第九周(向量类)
- CentOS 7.0,启用iptables防火墙
- Spring 异常解决办法
- Android5.0 Recovery 支持中文
- treeview控件(动态数据绑定+整行选择)(WPF)(二)
- 判断二叉数是否是平衡树
- Android—给控件设置边框
- java中数组与List相互转换的方法
- 扫描二维码自动识别手机APP下载地址
- Ryu代码解析(二)
- Vim基本功
- this class is not key value coding-compliant for the key nameField.'
- 估计