=====潇洒的版权线======www.ayjs.net===== Aaronyang ===== AY ====== 安徽 六安 杨洋 ====== 未经容许不准转载 ======windows
1.新建个WPF应用程序,而后添加一个windows窗体ide
此时左侧工具箱自动winform的工具箱了。工具
而后添加个按钮,并设置DialogResult属性为OK动画
打开WPF的MainWindow.xaml添加一个按钮,单击事件以下this
private void btnOpenWinform_Click(object sender, RoutedEventArgs e) { ShowSwfForm ss = new ShowSwfForm(); if (ss.ShowDialog() == System.Windows.Forms.DialogResult.OK) { MessageBox.Show("OK按钮被单击"); } }
效果图:spa
=============潇洒的版权线==========www.ayjs.net===== Aaronyang ========= AY =========== 安徽 六安 杨洋 ========== 未经容许不准转载 =========.net
显示非模态窗口,首先添加WindowsFormIntegration.dll设计
再添加一个按钮,咱们打开winform的界面的事件以下3d
private void btnOpenNormallWinform_Click(object sender, RoutedEventArgs e) { ShowSwfForm ss = new ShowSwfForm(); //拦截键盘事件,方便界面得到键盘操做 WindowsFormsHost.EnableWindowsFormsInterop(); ss.Show(); }
不加这行 WindowsFormsHost.EnableWindowsFormsInterop();代码,打开窗口后按键将没法捕获,例如tab键,你能够试试。加上后,tab后按钮会有虚线框,说明tab键生效了。code
2.启用winform的可视化效果
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); //System.Windows.Forms.Application.EnableVisualStyles(); } }
试一下定义个样式,发现不会生效的,可是上面那行代码EnableVisualStyles应该是让按钮跟随系统变化的
3. 一个界面上的winform控件和wpf控件
winform的每一个控件都是独立窗口,每一个控件都拥有本身屏幕的区域。
wpf就有一个浮在屏幕上的顶级窗口。因此wpf只要有单独的顶级窗口句柄,而且wpf引擎组织整个窗口,窗口才能更好的渲染。WPF有些元素使用单独的窗口句柄。例如菜单、工具提示以及组合框的下拉部分。这些都有扩展窗口边界的能力。
"空域"原则,WPF内容上放置winform窗体内容,winform窗体内容就会总在wpf的上面,而无论标记在什么地方声明的。因此不能经过重叠来组合WPF和winform窗体内容。意味着不能使用动画飞过winform窗体渲染的区域。一样内容也不能混合在一块儿。因此WPF的使用flash通常套个winform,可是flash当背景仍是比较难的。
4.在WPF中驻留winform的控件,咱们须要使用WindowsFormsHost控件,若是要使用winform的控件,须要引入 xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
<Window x:Class="win32WPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStartupLocation="CenterScreen" xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" Title="MainWindow" Height="700" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="18*"/> <RowDefinition Height="205*"/> </Grid.RowDefinitions> <Button x:Name="btnOpenWinform" Click="btnOpenWinform_Click" Content="模态化打开winform" HorizontalAlignment="Left" Margin="28,10,0,0" VerticalAlignment="Top" Width="145"/> <Button x:Name="btnOpenNormallWinform" Click="btnOpenNormallWinform_Click" Content="正常winform" HorizontalAlignment="Left" Margin="178,10,0,0" VerticalAlignment="Top" Width="145"/> <WindowsFormsHost Grid.Row="1"> </WindowsFormsHost> </Grid> </Window>
取值的话,直接给NumericUpDown控件加上x:name="nud"依赖属性,而后后台直接this.nud.Value.ToString();
接着咱们引入Flash的com组件
引入玩才发现,2015年的flash com组建已经变了,网上的基础教程通常没用了。好吧,本身琢磨。
没有找到网上说的AxShockwaveFlash控件。
可是,算了,仍是果断放弃吧,我选择了第二种方案,找到C:\Windows\System32\Macromed\Flash目录,找到了Flash.ocx和Flash64_17_0_0_134.ocx,我不知道哪一个有用,猜想Flash64_17_0_0_134.ocx应该是64位的
移除刚刚的ShockwaveFlash引用。我仍是打开COM组建引用,而后浏览本地,选择了Flash.ocx,结果发现仍是跟上次同样,好吧...思考中..
而后我打开了ShowSwfForm.cs ,而后 winform版本的设计器的工具箱,右键常规-选择项-COM组件,找到Shockwave Flash Object,单击肯定。接着拖动这个控件到winform窗体上,尼玛..
出现了
好吧,你赢了,我又回到刚刚的WPF页面,写下了熟悉的AxShockwaveFlash代码,接下来就简单了。
<Window x:Class="win32WPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStartupLocation="CenterScreen" xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" xmlns:f="clr-namespace:AxShockwaveFlashObjects;assembly=AxInterop.ShockwaveFlashObjects" Title="MainWindow" Height="700" Width="800" Loaded="Window_Loaded"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="18*"/> <RowDefinition Height="205*"/> </Grid.RowDefinitions> <Button x:Name="btnOpenWinform" Click="btnOpenWinform_Click" Content="模态化打开winform" HorizontalAlignment="Left" Margin="28,10,0,0" VerticalAlignment="Top" Width="145"/> <Button x:Name="btnOpenNormallWinform" Click="btnOpenNormallWinform_Click" Content="正常winform" HorizontalAlignment="Left" Margin="178,10,0,0" VerticalAlignment="Top" Width="145"/> <WindowsFormsHost Grid.Row="1" x:Name="wfh"> <!--<wf:NumericUpDown Maximum="100" Minimum="0" Increment="10" Width="100" Dock="Top"></wf:NumericUpDown>--> <f:AxShockwaveFlash x:Name="flashContainer"/> </WindowsFormsHost> </Grid> </Window>
OK,后台代码,网上都是能百度出来的了。
=============潇洒的版权线==========www.ayjs.net===== Aaronyang ========= AY =========== 安徽 六安 杨洋 ========== 未经容许不准转载 =========
-------------------小小的推荐,做者的确定,读者的支持。推不推荐不重要,重要的是但愿你们能把WPF推广出去,别让这么好的技术消失了,求求了,让咱们为WPF技术作一份贡献。-----------------