none
添加tooltip到datagrid header? RRS feed

  • 问题

  • 请问,如何使用behind code添加tooltip到datagrid header?
    我查到的都是在xaml中添加,因为我的datacolumn是动态产生的,我想动态添加tooltip到header

    <data:DataGrid>
        <data:DataGrid.Columns>
            <data:DataGridTextColumn Header="My Header">
                <data:DataGridTextColumn.HeaderStyle>
                    <Style TargetType="dataprimitives:DataGridColumnHeader">
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <ContentControl Content="{Binding}">
                                        <ToolTipService.ToolTip>
                                            <ToolTip Content="My Tooltip"></ToolTip>
                                        </ToolTipService.ToolTip>
                                    </ContentControl>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </data:DataGridTextColumn.HeaderStyle>
            </data:DataGridTextColumn>
        </data:DataGrid.Columns>
    </data:DataGrid>
    2009年10月26日 21:27

答案

  • 动态添加有点麻烦,因为DataTemplate这个类没有Content或者Value可以让你设定其内容的,所以到了DataTemplate这一步,就必须借助 XamlReader.Load来产生一个DataTemplate的实例了:

    下面为参考代码,假设DataGrid名为DataGrid1:
    (
      加上下面两个命名空间:
      using System.Windows.Controls.Primitives;
      using System.Windows.Markup;
    )

                DataGridColumn col = new DataGridTextColumn();
                col.Header = "My Header";
     
                Style style = new Style(typeof(DataGridColumnHeader));
                Setter st = new Setter();
                st.Property = DataGridColumnHeader.ContentTemplateProperty;
                DataTemplate dt = (DataTemplate)XamlReader.Load("<DataTemplate xmlns='http://schemas.microsoft.com/client/2007' ><ContentControl Content=\"{Binding}\"><ToolTipService.ToolTip><ToolTip Content=\"My Tooltip\"></ToolTip></ToolTipService.ToolTip></ContentControl></DataTemplate>");            
                st.Value = dt;
                style.Setters.Add(st);

                col.HeaderStyle = style;
                DataGrid1.Columns.Add(col);

    2009年10月27日 7:20

全部回复

  • 动态添加有点麻烦,因为DataTemplate这个类没有Content或者Value可以让你设定其内容的,所以到了DataTemplate这一步,就必须借助 XamlReader.Load来产生一个DataTemplate的实例了:

    下面为参考代码,假设DataGrid名为DataGrid1:
    (
      加上下面两个命名空间:
      using System.Windows.Controls.Primitives;
      using System.Windows.Markup;
    )

                DataGridColumn col = new DataGridTextColumn();
                col.Header = "My Header";
     
                Style style = new Style(typeof(DataGridColumnHeader));
                Setter st = new Setter();
                st.Property = DataGridColumnHeader.ContentTemplateProperty;
                DataTemplate dt = (DataTemplate)XamlReader.Load("<DataTemplate xmlns='http://schemas.microsoft.com/client/2007' ><ContentControl Content=\"{Binding}\"><ToolTipService.ToolTip><ToolTip Content=\"My Tooltip\"></ToolTip></ToolTipService.ToolTip></ContentControl></DataTemplate>");            
                st.Value = dt;
                style.Setters.Add(st);

                col.HeaderStyle = style;
                DataGrid1.Columns.Add(col);

    2009年10月27日 7:20
  • 谢谢您的回复 。
    2009年10月27日 17:40
  • 不客气~~

    2009年10月28日 1:42