当前位置:  开发笔记 > 编程语言 > 正文

动态设置Silverlight DataGrid列的标题文本

如何解决《动态设置SilverlightDataGrid列的标题文本》经验,为你挑选了3个好方法。

您不能绑定到标头,因为它不是FrameworkElement.您可以通过修改标题模板使文本动态化,如下所示:

xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"

   
   
       
   

你如何保持原始标题的视觉样式? (12认同)

在这个问题中,RobSiklos提供的解决方案也保持了视觉样式. (2认同)

我认为接受的答案应该是RobSiklos的答案.不仅因为保持了视觉样式,而且因为提供了一种简单的实现方式,可以将"样式"和"代码"的概念分开. (2认同)


RobSiklos.. 14

我的解决方法是使用附加属性自动设置绑定:

public static class DataGridColumnHelper
{
    public static readonly DependencyProperty HeaderBindingProperty = DependencyProperty.RegisterAttached(
        "HeaderBinding",
        typeof(object),
        typeof(DataGridColumnHelper),
        new PropertyMetadata(null, DataGridColumnHelper.HeaderBinding_PropertyChanged));

    public static object GetHeaderBinding(DependencyObject source)
    {
        return (object)source.GetValue(DataGridColumnHelper.HeaderBindingProperty);
    }

    public static void SetHeaderBinding(DependencyObject target, object value)
    {
        target.SetValue(DataGridColumnHelper.HeaderBindingProperty, value);
    }

    private static void HeaderBinding_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        DataGridColumn column = d as DataGridColumn;

        if (column == null) { return; }

        column.Header = e.NewValue;
    }
}

然后,在XAML中:



Lars Holm Je.. 11

要保持原始标题的视觉样式,请使用ContentTemplate而不是Template:



    
        
    



1> 小智..:

您不能绑定到标头,因为它不是FrameworkElement.您可以通过修改标题模板使文本动态化,如下所示:

xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"

   
   
       
   


你如何保持原始标题的视觉样式?
在这个问题中,RobSiklos提供的解决方案也保持了视觉样式.
我认为接受的答案应该是RobSiklos的答案.不仅因为保持了视觉样式,而且因为提供了一种简单的实现方式,可以将"样式"和"代码"的概念分开.

2> RobSiklos..:

我的解决方法是使用附加属性自动设置绑定:

public static class DataGridColumnHelper
{
    public static readonly DependencyProperty HeaderBindingProperty = DependencyProperty.RegisterAttached(
        "HeaderBinding",
        typeof(object),
        typeof(DataGridColumnHelper),
        new PropertyMetadata(null, DataGridColumnHelper.HeaderBinding_PropertyChanged));

    public static object GetHeaderBinding(DependencyObject source)
    {
        return (object)source.GetValue(DataGridColumnHelper.HeaderBindingProperty);
    }

    public static void SetHeaderBinding(DependencyObject target, object value)
    {
        target.SetValue(DataGridColumnHelper.HeaderBindingProperty, value);
    }

    private static void HeaderBinding_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        DataGridColumn column = d as DataGridColumn;

        if (column == null) { return; }

        column.Header = e.NewValue;
    }
}

然后,在XAML中:




3> Lars Holm Je..:

要保持原始标题的视觉样式,请使用ContentTemplate而不是Template:



    
        
    


这种方法绝对是可行的方法,它保留了视觉样式.如果你重新模板整个标题,它会变成一个白色的框,包含你放在那里的任何东西.但是,如果使用ContentTemplate,则会保留默认标题样式的现有背景.
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有