public
partial
class
FieldsView : Window
{
public
FieldsView ()
{
InitializeComponent();
}
private
void
RadRibbonButton_Click(
object
sender, RoutedEventArgs e)
{
Expendo =
new
ExpandoObject();
IDocumentFormatProvider provider =
new
DocxFormatProvider();
OpenFileDialog openDialog =
new
OpenFileDialog();
openDialog.Filter =
"Documents|*.docx"
;
openDialog.Multiselect =
false
;
bool
? dialogResult = openDialog.ShowDialog();
if
(dialogResult ==
true
)
{
using
(Stream stream = openDialog.OpenFile())
{
radRichTextBox.Document = provider.Import(stream);
}
}
AddControls();
}
public
dynamic Expendo {
get
;
set
; }
public
List<Control> Controls {
get
;
set
; }
private
void
AddControls()
{
Controls =
new
List<Control>();
int
num= 1;
IDictionary<
string
,
object
> expDict = Expendo;
//this.radRichTextBox.UpdateAllFields(Telerik.Windows.Documents.Model.FieldDisplayMode.DisplayName);
var mergeFields = GetMergeFields();
foreach
(
string
item
in
mergeFields)
{
expDict.Add(item.ToString(), item.ToString());
System.Windows.Controls.Label lbl =
new
System.Windows.Controls.Label();
lbl.Content = item;
TextBox txt =
new
TextBox();
txt.Tag = item.ToString();
txt.Width = 100;
txt.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
txt.Margin =
new
Thickness(5, 0, 0, 0);
Controls.Add(lbl);
Controls.Add(txt);
}
radRichTextBox.Document.MailMergeDataSource.ItemsSource = Enumerable.Repeat(expDict, 1);
Button btn =
new
Button();
btn.Name =
"btn"
;
btn.Content =
"Oluştur"
;
btn.Width = 120;
btn.Height = 30;
btn.Margin =
new
Thickness(0, 20, 0, 0);
btn.Click += btn_Click;
Controls.Add(btn);
Kontroller.ItemsSource = Controls;
}
private
void
btn_Click(
object
sender, RoutedEventArgs e)
{
IDictionary<
string
,
object
> expDict = Expendo;
foreach
(var control
in
Controls.ItemsSource)
{
if
(control
is
TextBox)
{
TextBox tb = control
as
TextBox;
if
(!
string
.IsNullOrWhiteSpace(tb.Text))
{
//item.ID = tb.Text;
//foreach (var itemprop in expDict[item.Name])
//{
//PropertyInfo propertyInfo = item.GetType().GetProperty("ID");
//propertyInfo.SetValue(item.ID, tb.Text, null);
//}
expDict[expDict.Where(x => x.Key == tb.Tag.ToString()).FirstOrDefault().Key] = tb.Text;
//this.radRichTextBox.Document.fields
}
}
}
//this.radRichTextBox.Document.MailMerge(true);
//this.radRichTextBox.UpdateAllFields(FieldDisplayMode.Result);
radRichTextBox.Document.MailMerge();
radRichTextBox.UpdateAllFields(Telerik.Windows.Documents.Model.FieldDisplayMode.Result);
radRichTextBox.MailMerge(
false
);
}
private
List<
string
> GetMergeFields()
{
XamlFormatProvider provider =
new
XamlFormatProvider();
string
myXamlString = provider.Export(radRichTextBox.Document);
//doc.MailMergeDataSource.
//doc.MailMergeDataSource.ItemsSource = Enumerable.Repeat(fs.Expando, 1);
MatchCollection matchList = Regex.Matches(myXamlString,
"«(.*?)»"
);
List<
string
> list = matchList.Cast<Match>().Select(match => match.Groups[1].Value).ToList();
return
list;
}
}
but i dont know how can i lock my merge fields for users touches?