置百丈玄冰而崩裂,掷须臾池水而漂摇。

在WPF中使用WinForm控件

C# 强强

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;