2012-06-26 41 views
1

我想我失去了一些明顯的東西... 我使用Telerik Rad控件的WPF,但我認爲富文本框使用一些類似的郵件實現合併功能。Telerik郵件合併 - 友好名稱(使用RadRichTextBox)

我想在郵件合併字段上輸入一些友好的名稱。 (在字段名稱即空格) 所以我有一個類,例如

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

Public property anothercomplexfield as string 
} 

這是我知道的獲得是郵件合併的下拉「友好」名稱的唯一途徑。 所以這兩個領域打開了沒關係,: 「這是場複雜的描述」 「anothercomplexfield」

但只有anothercomplexfield實際數據填充,當你做了合併。

我將不得不模板的郵件合併領域的raddropdownbutton? 有沒有這個地方的例子?

也是一個子問題。我如何在這些東西上添加滾動條?

(也我知道這個板子是不是一個Telerik的具體板(廢話!),但是這可能是有用的人的未來。因此,我將複製的答案我從Telerik的進入這裏! http://www.telerik.com/community/forums/wpf/richtextbox/558428-radrichtextbox-mailmerge---using-displayname-to-create-a-friendly-name-with-spaces.aspx

回答

0

這是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是代碼不能改變所顯示的片段。

至於您的其他問題,您可以更改下拉按鈕的內容以顯示字段的友好名稱,並按以下方式包含滾動條: 1.首先,將按鈕的綁定移除從XAML的InsertMergeFieldEmptyCommand並給它一個名字(例如insertMergeField)。 2.然後,添加以下代碼在代碼隱藏:

AddMergeFieldsInDropDownContent(this.insertMergeFieldButton); 

private void AddMergeFieldsInDropDownContent(RadRibbonDropDownButton radRibbonDropDownButton) 

{ 電網格=新的Grid(); (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方法的代碼,並以兩種類都可用的方式添加它。