You Are My Crystal

导航

【原】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属性对应的值)

 

1 <Style x:Key="DataGrid_Header_Tooltip" TargetType="dataprimitives:DataGridColumnHeader">
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>

 

 

 

 

 

posted on 2010-12-01 16:46  mycrystal  阅读(648)  评论(1编辑  收藏  举报