=====瀟灑的版權線======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技術作一份貢獻。-----------------