【问题标题】:WPF ListView GridView GridViewColumn StringFormat CodeBehind .NET 4.0 Visual Studio 2010WPF ListView GridView GridViewColumn StringFormat CodeBehind .NET 4.0 Visual Studio 2010
【发布时间】:2011-12-04 20:45:12
【问题描述】:

需要在后面的代码中格式化 ListView GridView 中的字符串。 XAML 不是一个选项,因为数据和列是在代码中创建的。

所需日期格式的 XAML 版本是:

   <TextBlock TextWrapping="NoWrap" Text="{Binding Path=DateTime, Mode=OneWay, StringFormat={}{0:yyyy/MM/dd hh:mm tt}}" />

在这种情况下,我不能使用 XAML,因为列数会有所不同,并且需要以该格式显示日期的列也会有所不同。我只是无法弄清楚如何在后面的代码中应用该日期格式。下面是构建列的工作代码。

    GridViewColumn gvc;
    GridViewColumnHeader gvch;
    Binding gvBinding;
    DataTemplate template;
    FrameworkElementFactory textblock;

    // Data Column
    gvc = new GridViewColumn();
    gvch = new GridViewColumnHeader();
    gvch.Content = SF.DispName;
    gvch.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch;
    gvch.VerticalContentAlignment = System.Windows.VerticalAlignment.Bottom;
    gvch.VerticalAlignment = System.Windows.VerticalAlignment.Bottom;
    gvc.Header = gvch;
    gvBinding = new Binding();
    gvBinding.Mode = BindingMode.OneWay;
    gvBinding.Path = new PropertyPath("[" + (sDocBaseResultDocsFieldsIndex * 2).ToString() + "]");
    template = new DataTemplate();
    textblock = new FrameworkElementFactory(typeof(TextBlock));
    textblock.SetValue(TextBlock.TextProperty, gvBinding);
    // textblock.SetValue(TextBlock.TextTrimmingProperty, TextTrimming.WordEllipsis);
    template.VisualTree = new FrameworkElementFactory(typeof(Grid));
    template.VisualTree.AppendChild(textblock);
    gvc.CellTemplate = template;
    gvSrchResultsScore.Columns.Add(gvc);

    sDocBaseResultDocsFieldsIndex++;

我需要添加如下内容,但无法弄清楚。我已经尝试了所有我能想到的 {}{0:yyyy/MM/dd hh:mm tt}} 排列。

    if (sDocBaseResultDocsFieldsIndex == 12) gvBinding.StringFormat = "Help";   

【问题讨论】:

    标签: wpf listview gridview binding string-formatting


    【解决方案1】:

    您在 xaml 中使用的空括号 {} 是转义序列,因此解析器不会将格式解释为标记扩展。您不需要在代码隐藏中使用它们 - 试试这个:

    gvBinding.StringFormat = "{0:yyyy/MM/dd hh:mm tt}";
    

    【讨论】:

    • 我认为这是正确的答案,我的问题是我给它一个字符串而不是一个日期。它所做的是在我将日期放入字符串之前格式化日期,然后仍然绑定到字符串以解决我的问题。但我将构建一个测试来为 GridView 提供一个日期来测试您的解决方案,以便我可以将其标记为正确。
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 2012-06-30
    • 2010-12-13
    • 1970-01-01
    • 2011-05-27
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多