이것은 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.RowDefinitions.Add (새 RowDefinition() {높이 = 새 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 방법의 코드를 최적화하고 두 클래스로 사용할 수있는 방법으로 추가 할 수 있습니다.