項目中有個界面展示用WPF實現起來比較簡單,並且能提供更酷炫的效果,但是在WinForm中使用WPF窗體出現了問題,在網上找了一下有些人說Winform不能引用WPF的窗體,我就很納悶,Win32都能引用WPF控件,怎么可能同樣運行在.net Fromework框架下的Winfrom不能運行呢。經過慢慢嘗試終於找到一個簡單的解決方案,神馬反射,神馬工廠都是浮雲,只需要在Winform項目中引用WPF項目下引用的三個程序集:PresentationCore,PrentationFramework,WindowsBase,
這個時就可以使用WPF窗體類實例中的屬性和方法了。
在Winform窗體中使用WPF控件
轉自:http://www.cnblogs.com/DebugLZQ/archive/2012/05/19/2508846.html
今天是禮拜6,下雨,沒有外出,閑暇就寫一篇博文講下如何在Winform中使用WPF控件。原有是我在百度上搜索相關信息無果,遂干脆動手自己實現。
WPF控件的漂亮是Winform無法匹及的,本文主旨是在Winform工程中如何使用WPF控件。
先看下效果,如下圖:
左邊是傳統的Winform控件,右邊是DebugLZQ引入的WPF控件,我們可以很清楚的看到圖片的“半透明”效果、TextBox的透明背景!界面很Cool吧~
下面就介紹下,這個創新性工程的創建過程,並附上所有代碼:
首先,添加一個WPF自定義控件,控件的xaml很簡單,代碼如下:
<Grid > <Image Margin="10,10,10,90" x:Name="img" Stretch="Uniform" Opacity="1"> <Image.BitmapEffect> <DropShadowBitmapEffect Opacity="1" /> </Image.BitmapEffect> </Image> <TextBox Background="Transparent" Foreground="White" Height="40" FontSize="32" Margin="44,0,56,36" x:Name="txtBox1" Opacity="0.5" Text="" VerticalAlignment="Bottom" /> </Grid>
其次,我們需要添加相應的設置效果的函數,代碼如下:
public void SetSource(string fileName) { img.Source = new BitmapImage(new Uri(fileName) ); } public void SetOpacity(double opacity) { img.Opacity = opacity; } // public string GetText() { return txtBox1.Text; }
OK,以上步驟完成后我們建立一個Winform應用程序,添加先關的引用,這個非常重要,否則控件無法正常工作,引用的清單如下:
這里需要重點提出的是WindowsFormsIntegration這個引用。
我們編譯整個項目,編譯成功在工具箱中會出現相應的控件,如下圖:
拖動這個控件到Winform窗體中,調用相應的函數。函數調用代碼如下:
userControl11.SetSource(@"D:\臨時文件\新建文件夾\DebugLZQ.jpg"); userControl11.SetOpacity(0.5);
string text = userControl11.GetText();
OK,至此程序完成。很簡單強大吧~
再次看下效果圖: