【问题标题】:Telerik Mail Merge - Friendly Names (using RadRichTextBox)Telerik 邮件合并 - 友好名称(使用 RadRichTextBox)
【发布时间】:2012-06-26 01:36:03
【问题描述】:

我想我遗漏了一些明显的东西...... 我正在为 WPF 使用 Telerik Rad 控件,但我假设富文本框对邮件合并功能使用了一些类似的实现。

我想在我的邮件合并字段上有一些友好的名字。 (即字段名称中的空格) 所以我有一个类例如

Public Class someclass
{
<DisplayName("This is the complex description of the field")>
Public property thisfieldnamehasacomplexdescription as string

Public property anothercomplexfield as string
}

这是我知道在邮件合并下拉列表中获取“友好”名称的唯一方法。 所以这两个字段可以正常显示为: “这是对该领域的复杂描述” “另一个复杂的领域”

但在您进行合并时,实际上只有另一个复杂字段会填充数据。

我是否必须对包含邮件合并字段的 raddropdownbutton 进行模板化? 有没有这方面的例子?

也是一个子问题。如何在这些东西上添加滚动条?

(我也知道这个板不是 TELERIK 特定的板(呃!)但这可能对将来的某人有用。所以我将从 Telerik 得到的答案复制到这里! http://www.telerik.com/community/forums/wpf/richtextbox/558428-radrichtextbox-mailmerge---using-displayname-to-create-a-friendly-name-with-spaces.aspx)

【问题讨论】:

    标签: vb.net telerik mailmerge


    【解决方案1】:

    这是telerik给我的:

    使用默认的 MergeFields,无法更改字段的显示名称片段以实现更友好的外观。如果您通过从 MergeField 类派生来实现自定义 MergeField,这应该是可能的。下面是一个示例实现,展示了如何做到这一点:

    public class CustomMergeField : MergeField
    {
    private const string CustomFieldName = "CustomField";
    
    static CustomMergeField()
    {
        CodeBasedFieldFactory.RegisterFieldType(CustomMergeField.CustomFieldName, () => { return new CustomMergeField(); });
    }
    
    public override string FieldTypeName
    {
        get
        {
            return CustomMergeField.CustomFieldName;
        }
    }
    
    public override Field CreateInstance()
    {
        return new CustomMergeField();
    }
    
    protected override DocumentFragment GetDisplayNameFragment()
    {
        return base.CreateFragmentFromText(string.Format(Field.DisplayNameFragmentFormat, this.GetFriendlyFieldName(this.PropertyPath)));
    }
    
    private string GetFriendlyFieldName(string fieldName)
    {
        int lettersInEnglishAlphabet = 26;
        List<char> separators = new List<char>(lettersInEnglishAlphabet);
        for (int i = 0; i < lettersInEnglishAlphabet; i++)
        {
            separators.Add((char)('A' + i));
        }
        StringBuilder newFieldName = new StringBuilder();
        int previousIndex = 0;
        for (int i = 1; i < fieldName.Length; i++)
        {
            if (separators.Contains(fieldName[i]))
            {
                if (previousIndex > 0)
                {
                    newFieldName.Append(" ");
                }
                newFieldName.Append(fieldName.Substring(previousIndex, i - previousIndex));
                previousIndex = i;
            }
        }
        newFieldName.Append(" " + fieldName.Substring(previousIndex));
        return newFieldName.ToString();
    }
    }
    

    注意,DisplayMode 为 Code 时显示的 Fragment 无法更改。

    至于您的其他问题,您可以更改下拉按钮的内容以显示字段的友好名称并通过以下方式包含滚动条: 1. 首先,从 XAML 中移除按钮与 InsertMergeFieldEmptyCommand 的绑定,并为其命名(例如 insertMergeField)。 2、接下来在code-behind中添加如下代码:

    AddMergeFieldsInDropDownContent(this.insertMergeFieldButton);
    
    private void AddMergeFieldsInDropDownContent(RadRibbonDropDownButton radRibbonDropDownButton)
    

    { 网格网格 = 新网格(); grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(100, GridUnitType.Pixel) });

    ScrollViewer scrollViewer = new ScrollViewer();
    scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
    StackPanel stackPanel = new StackPanel();
    
    foreach (string fieldName in this.editor.Document.MailMergeDataSource.GetColumnNames())
    {
        RadRibbonButton fieldButton = new RadRibbonButton()
        {
            Text = this.GetFriendlyFieldName(fieldName),
            Size = ButtonSize.Medium,
            HorizontalAlignment = HorizontalAlignment.Stretch,
            HorizontalContentAlignment = HorizontalAlignment.Left
        };
    
        fieldButton.Command = this.editor.Commands.InsertFieldCommand;
        fieldButton.CommandParameter = new MergeField() { PropertyPath = fieldName };
        //or
        //fieldButton.CommandParameter = new CustomMergeField() { PropertyPath = fieldName };
    
        stackPanel.Children.Add(fieldButton);
    }
    stackPanel.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
    scrollViewer.Content = stackPanel;
    grid.Children.Add(scrollViewer);
    
    radRibbonDropDownButton.DropDownContent = grid;
    }
    

    当然,您可以优化 GetFriendlyName 方法的代码,并以两种类都可以使用的方式添加它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多