【原】Silverlight:为DataGird的header设置tooltip
1 引入xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
2 定义一个Style:(使用Datagrid 的HeaderStyle引用这个Style即可,显示的Tooltip和文本是DataGrid的Header属性对应的值)
2 <Setter Property="ContentTemplate">
3 <Setter.Value>
4 <DataTemplate>
5 <TextBlock Text="{Binding}" ToolTipService.ToolTip="{Binding}"></TextBlock>
6 </DataTemplate>
7 </Setter.Value>
8 </Setter>
9</Style>
补充说明:
1 Datagrid->"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
2 DataGrid的Head和HeadStyle(下面说的情况主要用于MVVM,在View中,一切都是Binding的):
Head用来保存数据(这个数据在XAML中总是以字符串来处理的),HeadStyle用来决定如何显示数据,比如上边的例子,设置Column的Head="ABC"那么,Head对应的值就为字符串ABC,headStyle中Text={Binding}就以ABC作为值显示出来。
如果我Head中想放一个对应于ViewModel的属性,这个Binding的怎么写?
第一个想法是直接在Head中使用Binding,比如Head={Binding xxx} 这种是不好使的,这么做的结果是,首先会调用xxx的ToString方法,然后把结果显示出来,如果设置的HeadStyle,那么HeadStyle中对应的是xxx.ToString得到的字符串。
第二种办法是使用Resource:
<datagrid:DataGridTextColumn Header="{StaticResource DataGrid}" HeaderStyle="{StaticResource SelectAllTemplate}"></datagrid:DataGridTextColumn>
最好的办法:
代码
<UserControl x:Class="SilverlightApplication4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:datagrid="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
xmlns:local="clr-namespace:SilverlightApplication4"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<ResourceDictionary>
<Style x:Key="SelectAllTemplate" TargetType="primitives:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<CheckBox IsChecked="{Binding DataContext.SelectAll,ElementName=LayoutRoot}" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<datagrid:DataGrid x:Name="datagrid">
<datagrid:DataGrid.Columns>
<datagrid:DataGridTextColumn HeaderStyle="{StaticResource SelectAllTemplate}" ></datagrid:DataGridTextColumn>
</datagrid:DataGrid.Columns>
</datagrid:DataGrid>
</Grid>
</UserControl>