这是如何从表格 2 中获取值并使用转换器在表格 1 中显示结果的完整代码
在表格 2 中并从文本框中获取值
//打开表单2并从文本框中获取值
private void button1_Click(object sender, RoutedEventArgs e)
{
var form2 = new Form2 {Owner = this};
form2.ShowDialog();
if(form2.DialogResult==true)
{
this.formatTemplate.Text = form2.DataContext as string;
}
}
在表单 2 中设置关闭按钮并将文本框值发送到表单 1
private void btnClose_Click(object sender, RoutedEventArgs e)
{
this.DataContext = textBox1.Text;
this.DialogResult = true;
}
在表单 1 的 XAML 中
<Window.Resources>
<local:Converter x:Key="converter" />
</Window.Resources>
<Grid x:Name="LayoutRoot">
<StackPanel>
<TextBox Text="one" x:Name="textBox1" />
<TextBox Text="two" x:Name="textBox2" />
<TextBox Text="three" x:Name="textBox3" />
<TextBox Text="" x:Name="formatTemplate" Visibility="Collapsed" />
<TextBox x:Name="textBox4" >
<MultiBinding Converter="{StaticResource converter}">
<Binding ElementName = "textBox1" Path="Text"/>
<Binding ElementName = "textBox2" Path="Text"/>
<Binding ElementName = "textBox3" Path="Text"/>
<Binding ElementName="formatTemplate" Path="Text" />
</MultiBinding>
</TextBox>
<Button Content="Button" Height="25" Name="button1" Width="155" Click="button1_Click" />
</StackPanel>
</Grid>
和转换器代码:
public class Converter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var formatsource = values[3] as string; // text value in textboxt formatTemplate
var re = new Regex(@"%[A-Za-z0-9]+%"); //match any text surrounded by % sign
var count = 0;
foreach (var m in re.Matches(formatsource))
{
formatsource= re.Replace(formatsource, values[count++] as string, 1); // replace one match at the time
}
return formatsource;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}