当前位置:   article > 正文

WPF与WindowsForms的交互

WPF与WindowsForms的交互

1,在WPF中调用WinForm及其控件。

1.1,在WPF中调用WinFrom窗口。

        调用模态Winform窗口,可正常进行交互,无异常。

  1. private void btnOpenWin_Click(object sender, RoutedEventArgs e)
  2. {
  3. FrmMsg win = new FrmMsg();
  4. win.ShowDialog();
  5. }

        调用非模态WinForm窗口,交互能力受限,winform窗口不能接收一些键盘信息如Tab键的信息。如要正常交互则需要进行如下处理。

        引入程序集:WindowsFormsIntegration.dll

  1. private void btnOpenWin_Click(object sender, RoutedEventArgs e)
  2. {
  3. WindowsFormsHost.EnableWindowsFormsInterop();
  4. FrmMsg win = new FrmMsg();
  5. win.ShowDialog();
  6. }

1.2,优化WinForm窗口的显示风格。

Wpf调用的Winform窗口,其默认为XP风格,如果需要优化其风格需进行如下操作。

  1. public partial class App : Application
  2. {
  3. protected override void OnStartup(StartupEventArgs e)
  4. {
  5. base.OnStartup(e);
  6. //优化winform在Wpf中显示样式
  7. System.Windows.Forms.Application.EnableVisualStyles();
  8. }
  9. }

1.3,在Xaml中引入Winform控件。

        添加命名空间

xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

         使用Wpf的WindowsFormsHost元素包裹WinForm控件。

  1. <WindowsFormsHost Grid.Row="2">
  2. <!--引用wpf中没有的数字显示框-->
  3. <wf:NumericUpDown></wf:NumericUpDown>
  4. </WindowsFormsHost>

2,在Winform中调用Wpf窗口及其控件。

2.1,添加Wpf窗口。

        WinForm中不能直接创建Wpf窗口,需要通过添加现有项模式加载已有的Wpf窗口。

2.2,在WinForm中调用Wpf窗口。

        模态调用的Wpf窗口,可正常进行交互。

  1. private void btnOpenWin_Click(object sender, RoutedEventArgs e)
  2. {
  3. WpfWin win = new WpfWin();
  4. win.ShowDialog();
  5. }

        非模态调用Wpf窗口。默认情况下非模态调用的Wpf窗口无法接收键盘信息即无法交互,必须进行如下操作才可正常交互。

        引用程序集:WindowsFormsIntegration.dll

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. WpfWin win = new WpfWin();
  4. //需要添加对win的引用否则win非模态窗口不能接收键盘信息,模态不存在这个问题
  5. ElementHost.EnableModelessKeyboardInterop(win);
  6. win.Show();
  7. }

 

2.4,Winform中添加Wpf自定义控件

        WinForm中可直接创建Wpf的自定义控件,创建完自定义控件编译后通过WinForm的ElementHost控件驻留自定义的Wpf控件。

自定义的控件:

  1. <UserControl x:Class="WinForm中调用WPF窗口.MyWPFControl"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6. xmlns:local="clr-namespace:WinForm中调用WPF窗口"
  7. mc:Ignorable="d"
  8. d:DesignHeight="300" d:DesignWidth="300">
  9. <Grid>
  10. <Grid.RowDefinitions>
  11. <RowDefinition Height="27*"/>
  12. <RowDefinition Height="25*"/>
  13. <RowDefinition Height="18*"/>
  14. <RowDefinition Height="30*"/>
  15. </Grid.RowDefinitions>
  16. <Slider Maximum="100" Minimum="0" x:Name="slider01"></Slider>
  17. <TextBox Grid.Row="1" Margin="5" Background="AliceBlue" Text="{Binding ElementName=slider01, Path=Value}"></TextBox>
  18. <Button Margin="10" Content="提交" Grid.Row="2"></Button>
  19. </Grid>
  20. </UserControl>

        通过WinForm的ElementHost控件驻留。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/630849
推荐阅读
相关标签
  

闽ICP备14008679号