wpf的richtextbox 在设置rtf后,在输入汉字,一直撤销可能导致系统崩溃,尝试多个框架问题一直存在,就想wpf中使用winorm的控件了:
首先增加引用:
WindowsFormsIntegration.dll,System.Windows.Forms.dll
窗口中增加标签引用:
xmlns:xf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" xmlns:xfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
在WPF的容器控件内如StackPanel内首先要添加WinForm控件的宿主容器,用于衔接WPF和WinForm,
对应XAML如下:
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="Button_Click"/> <xfi:WindowsFormsHost Grid.Column="1" Margin="5" > <xf:RichTextBox x:Name="rt1"></xf:RichTextBox> </xfi:WindowsFormsHost> <WindowsFormsHost Grid.Column="1" Margin="5" Grid.Row="1"> <xf:RichTextBox x:Name="rt2"></xf:RichTextBox> </WindowsFormsHost> </Grid>
<xfi:WindowsFormsHost></xfi:WindowsFormsHost>即为WinForm控件的宿主容器,每一个宿主容器只能放一个WinForm控件
注意:如上添加的WinForm控件如在指定其Name时,必须加前缀x:,
<xf:RichTextBox x:Name="rt1"></xf:RichTextBox>
否则后台代码无法访问。
如果要在WPF后台代码中访问上面的Lable,可直接像在WinForm中使用一样。如在点击某一按钮时改变Lable内容,
代码如下:
this.rt1.text= str1;