赞
踩
调用模态Winform窗口,可正常进行交互,无异常。
- private void btnOpenWin_Click(object sender, RoutedEventArgs e)
- {
- FrmMsg win = new FrmMsg();
- win.ShowDialog();
- }
调用非模态WinForm窗口,交互能力受限,winform窗口不能接收一些键盘信息如Tab键的信息。如要正常交互则需要进行如下处理。
引入程序集:WindowsFormsIntegration.dll
- private void btnOpenWin_Click(object sender, RoutedEventArgs e)
- {
- WindowsFormsHost.EnableWindowsFormsInterop();
- FrmMsg win = new FrmMsg();
- win.ShowDialog();
- }
Wpf调用的Winform窗口,其默认为XP风格,如果需要优化其风格需进行如下操作。
- public partial class App : Application
- {
- protected override void OnStartup(StartupEventArgs e)
- {
- base.OnStartup(e);
- //优化winform在Wpf中显示样式
- System.Windows.Forms.Application.EnableVisualStyles();
- }
- }
添加命名空间
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
使用Wpf的WindowsFormsHost元素包裹WinForm控件。
- <WindowsFormsHost Grid.Row="2">
- <!--引用wpf中没有的数字显示框-->
- <wf:NumericUpDown></wf:NumericUpDown>
- </WindowsFormsHost>
WinForm中不能直接创建Wpf窗口,需要通过添加现有项模式加载已有的Wpf窗口。
模态调用的Wpf窗口,可正常进行交互。
- private void btnOpenWin_Click(object sender, RoutedEventArgs e)
- {
- WpfWin win = new WpfWin();
- win.ShowDialog();
- }
非模态调用Wpf窗口。默认情况下非模态调用的Wpf窗口无法接收键盘信息即无法交互,必须进行如下操作才可正常交互。
引用程序集:WindowsFormsIntegration.dll
- private void button1_Click(object sender, EventArgs e)
- {
- WpfWin win = new WpfWin();
- //需要添加对win的引用否则win非模态窗口不能接收键盘信息,模态不存在这个问题
- ElementHost.EnableModelessKeyboardInterop(win);
- win.Show();
-
- }
WinForm中可直接创建Wpf的自定义控件,创建完自定义控件编译后通过WinForm的ElementHost控件驻留自定义的Wpf控件。
自定义的控件:
- <UserControl x:Class="WinForm中调用WPF窗口.MyWPFControl"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:local="clr-namespace:WinForm中调用WPF窗口"
- mc:Ignorable="d"
- d:DesignHeight="300" d:DesignWidth="300">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="27*"/>
- <RowDefinition Height="25*"/>
- <RowDefinition Height="18*"/>
- <RowDefinition Height="30*"/>
- </Grid.RowDefinitions>
- <Slider Maximum="100" Minimum="0" x:Name="slider01"></Slider>
- <TextBox Grid.Row="1" Margin="5" Background="AliceBlue" Text="{Binding ElementName=slider01, Path=Value}"></TextBox>
- <Button Margin="10" Content="提交" Grid.Row="2"></Button>
- </Grid>
- </UserControl>
通过WinForm的ElementHost控件驻留。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。