轉帖|其它|編輯:郝浩|2010-10-22 11:26:51.000|閱讀 989 次
概述:本文主要截殺如何把WPF Dialog轉成WinForm Dialog需要注意的問題,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
最近項目中遇到這樣一個問題。之前有一個用WPF布局好的一個Dialog,如下圖:
但是,由于WPF的Dialog有一些小問題,當顯示Dialog的窗體被別的Active的Application蓋住之后再點TaskBar回來,顯示的Modal Dialog被扔到后面蓋住了。加之我們需要設置Dialog的ShowInTaskBar屬性為False,即不顯示在TaskBar上,用戶就會發現什么都點不了。
解決這個問題的方法就是把原有的WPF Window轉成UserControl,然后顯示在WinForm窗體上,通過WPFControlHost這個強悍的控件。
轉換完成之后就可以避免之前Dialog切換的問題。但是,新的問題又來了。新的Dialog看起來總是很不爽,如下圖示,所有的字體都發生了變化,導致原來調試好的布局亂掉了
推測可能跟UserControl從WinForm繼承了不同的Font導致的這個問題。目前已知WinForm控件的默認字體是Control.DefaultFont (“Microsoft Sans Serif, 8.25f”), 查了一下WPF控件的FontFamily/FontSize等DependencyProperty的聲明,原來這些屬性默認值如下:
這樣一來就清楚了。WPF下的控件默認字體和WinForm是不同的,在英文機器上,這個默認字體是(“Segoe UI, 12f”)。
因此我們需要修正Host在WinForm上的WPF UserControl的Font。
這個過程就比較簡單了。使用DynamicResource綁定系統的SystemFonts的資源Key就可以了,需要添加的XAML如下:
<UserControl x:Class="WPFDialog.UserControl1"
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
Height="352" Width="417"
FontFamily="{DynamicResource ResourceKey={x:Static SystemFonts.MessageFontFamilyKey}}"
FontStyle="{DynamicResource ResourceKey={x:Static SystemFonts.MessageFontStyleKey}}"
FontSize="{DynamicResource ResourceKey={x:Static SystemFonts.MessageFontSizeKey}}"
FontWeight="{DynamicResource ResourceKey={x:Static SystemFonts.MessageFontWeightKey}}">
完成之后Launch新的Dialog,之前的布局又回來了。
到這里,將WPF下的Dialog轉換成WinForm的Dialog基本完成。細心的TX可能發現還有不同,Dialog的背景一個是白一個是灰。這個問題也和兩個平臺下窗體的默認Background不同有關。解決方案同Font,這里就不再贅述。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載