您的位置:首页 > 其它

silverlight datagrid表头添加控件

2012-12-11 11:42 483 查看
想在silverlight的datagrid中添加一个列头控件,checkbox

首先添加资源文件,app也要用相应的设置,资源文件如下:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
<!-- 应该在此定义资源字典条目。-->
<Style x:Key="DataGridColumnHeaderStyle1" TargetType="sdk:DataGridColumnHeader">
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="SeparatorBrush" Value="#FFC9CACA"/>
<Setter Property="Padding" Value="4"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridColumnHeader">
<Grid x:Name="Root">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>

<ColorAnimation Duration="0" To="#FF448DCA"
Storyboard.TargetProperty="(Fill).Color"
Storyboard.TargetName="BackgroundRectangle"/>

<ColorAnimation Duration="0" To="#7FFFFFFF"
Storyboard.TargetProperty="(Fill).(GradientStops)[3].Color"
Storyboard.TargetName="BackgroundGradient"/>

<ColorAnimation Duration="0" To="#CCFFFFFF"
Storyboard.TargetProperty="(Fill).(GradientStops)[2].Color"
Storyboard.TargetName="BackgroundGradient"/>

<ColorAnimation Duration="0" To="#F2FFFFFF"
Storyboard.TargetProperty="(Fill).(GradientStops)[1].Color"
Storyboard.TargetName="BackgroundGradient"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>

<ColorAnimation Duration="0" To="#FF448DCA"
Storyboard.TargetProperty="(Fill).Color"
Storyboard.TargetName="BackgroundRectangle"/>

<ColorAnimation Duration="0" To="#D8FFFFFF"
Storyboard.TargetProperty="(Fill).(GradientStops)[0].Color"
Storyboard.TargetName="BackgroundGradient"/>

<ColorAnimation Duration="0" To="#C6FFFFFF"
Storyboard.TargetProperty="(Fill).(GradientStops)[1].Color"
Storyboard.TargetName="BackgroundGradient"/>

<ColorAnimation Duration="0" To="#8CFFFFFF"
Storyboard.TargetProperty="(Fill).(GradientStops)[2].Color"
Storyboard.TargetName="BackgroundGradient"/>

<ColorAnimation Duration="0" To="#3FFFFFFF"
Storyboard.TargetProperty="(Fill).(GradientStops)[3].Color"
Storyboard.TargetName="BackgroundGradient"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SortStates">
<VisualState x:Name="Unsorted"/>
<VisualState x:Name="SortAscending">
<Storyboard>

<DoubleAnimation Duration="0" To="1.0"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="SortIcon"/>
</Storyboard>
</VisualState>
<VisualState x:Name="SortDescending">
<Storyboard>

<DoubleAnimation Duration="0" To="1.0"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="SortIcon"/>

<DoubleAnimation Duration="0" To="-.9"
Storyboard.TargetProperty="(RenderTransform).ScaleY"
Storyboard.TargetName="SortIcon"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="BackgroundRectangle" Grid.ColumnSpan="2" Fill="#FF1F3B53" Stretch="Fill"/>
<Rectangle x:Name="BackgroundGradient" Grid.ColumnSpan="2" Stretch="Fill">
<Rectangle.Fill>
<LinearGradientBrush EndPoint=".7,1" StartPoint=".7,0">
<GradientStop Color="#FCFFFFFF" Offset="0.015"/>
<GradientStop Color="#F7FFFFFF" Offset="0.375"/>
<GradientStop Color="#E5FFFFFF" Offset="0.6"/>
<GradientStop Color="#D1FFFFFF" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>

<Grid HorizontalAlignment="{TemplateBinding
HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding
VerticalContentAlignment}">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ContentPresenter >
<ContentPresenter.Content>
<CheckBox Margin="0,0,56,0" Content="选择Foreground="Green"/>
</ContentPresenter.Content>
</ContentPresenter>

<Path x:Name="SortIcon" Grid.Column="1" Data="F1 M -5.215,6.099L
5.215,6.099L 0,0L -5.215,6.099 Z " Fill="#FF444444"
HorizontalAlignment="Left" Margin="4,0,0,0" Opacity="0"
RenderTransformOrigin=".5,.5" Stretch="Uniform"
VerticalAlignment="Center" Width="8">
<Path.RenderTransform>
<ScaleTransform ScaleY=".9" ScaleX=".9"/>
</Path.RenderTransform>
</Path>
</Grid>

<Rectangle x:Name="VerticalSeparator" Grid.Column="1"
Fill="{TemplateBinding SeparatorBrush}" Visibility="{TemplateBinding
SeparatorVisibility}" VerticalAlignment="Stretch" Width="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

然后在grid中对应列添加如下代码:

<data:DataGridTemplateColumn HeaderStyle="{StaticResource DataGridColumnHeaderStyle1}">

这样一切都搞定啦。

效果如下:



方法二:

在页面内部添加资源:

<UserControl.Resources>

<Style x:Key="checkHeader" TargetType="sdk:DataGridColumnHeader">

<Setter Property="ContentTemplate">

<Setter.Value>

<DataTemplate>

<StackPanel Orientation="Horizontal">

<TextBlock Text=" "></TextBlock>

<CheckBox x:Name="headChoice"
Click="chChoiceHeader_Click"
HorizontalAlignment="Center"></CheckBox>

</StackPanel>

</DataTemplate>

</Setter.Value>

</Setter>

</Style>

</UserControl.Resources>

添加完以后,在gird列定义时添加如下代码:

<sdk:DataGridTemplateColumn Width="50" HeaderStyle="{StaticResource checkHeader}">

<sdk:DataGridTemplateColumn.CellTemplate>

<DataTemplate>

<CheckBox x:Name="cbChoice" HorizontalAlignment="Center"></CheckBox>

</DataTemplate>

</sdk:DataGridTemplateColumn.CellTemplate>

</sdk:DataGridTemplateColumn>就可以了.

麻烦的地方在于每个地方都要填加.

在程序后台获取的方法是:
CheckBox
button = this.gridManager.Columns[this.gridManager.Columns.Count -
1].GetCellContent(item).FindName("cbChoice") as CheckBox;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: