上一篇中介绍了动态绑定数据库的方法,本篇中将会介绍整行选择的方法
<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();
}
}