मुझे लगता है कि इसके बाद के संस्करण टिप्पणी की मैं एक ही मुद्दा था और के बाद से यह संकल्प लिया है। मैं यहां किसी और के लिए अपने परिवर्तन लिख रहा हूं।
जैसा कि ऊपर देखा, व्यवहार होने के लिये एक WinForms आवेदन और बस समय (JIT) संकलक में विंडोज यूआई स्केलिंग का उपयोग कर WPF पुस्तकालयों से कुछ भी संसाधित करता है जब भी लगता है। मेरे मामले में, उस विधि को दर्ज करना जिसमें कोडबॉक्स है जो संदेशबॉक्स का WPF संस्करण खोलता है, ऐसा होगा। आमतौर पर विंडोज़ आपके लिए मूल स्केलिंग को संभालेगा, बिटमैप ऑफस्क्रीन पर प्रतिपादन करेगा और फिर स्क्रीन पर खींच रहा है लेकिन स्केल हो गया है। जब डब्ल्यूपीएफ लोड करता है तो ऐसा लगता है, जैसे कि यह विंडोज़ से कह रहा है, "अरे .. मुझे यह मिला .."। उसके बाद विंडोज़ आपके लिए WinForms स्केलिंग बंद कर देता है और आप 1x स्केल संस्करण और अक्सर कुछ उलझन में नियंत्रण के साथ समाप्त होता है। हालांकि डब्ल्यूपीएफ भाग अपना खुद का स्केलिंग कर रहा है और ठीक दिखता है।
तो जिस तरह से मैं सुलझाने यह विंडोज बताने के लिए है कि मैं WinForms स्केलिंग संभाल होता था के बारे में चला गया।
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
आप मालसूची फ़ाइल जोड़ सकते हैं: आप (dll प्रकट नजरअंदाज कर दिया है)
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
आपके आवेदन प्रकट करने के लिए इस जोड़ सकते हैं या निम्न अनुभाग uncomment अगर यह वहाँ में पहले से ही है कि सक्षम करने के लिए :
Right click on application project -> Add -> New item... -> Application Manifest File
तब में
...
Application Project -> Properties -> Application -> Resources
यकीन है कि "प्रकट" बनाओ app.manifest
पर सेट है अब आप उस फ़ाइल को खोजने के लिए और XML मूल <asmv1:assembly>
तत्व में ऊपर जोड़ सकते हैं।
आप डिफ़ॉल्ट आवेदन प्रकट लिया और उस तत्व जोड़े यह शायद इस
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</asmv1:assembly>
की तरह कुछ अब लग रहा है जब आप अपने WinForms आप इसे बहुत crisper है, क्योंकि यह उच्च डीपीआई पर गाया जा रहा है देखेंगे एप्लिकेशन शुरू गया है 96 डीपीआई के बजाय और फिर अंतरिक्ष को भरने के लिए बढ़ाया गया।
आप शायद देखेंगे कि आपकी कई छवियां घट गई हैं !! मेरे मामले में बटन, MenuStripItems और ToolStripItems वांछित के रूप में स्केल नहीं किया था।
मैं क्या पाया था सबसे नियंत्रण के लिए एक विधि है कि आप के रूप में नीचे ओवरराइड कर सकते हैं
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
}
यह कहा जाता है कि जब मुख्य रूप से आवेदन की शुरूआत और फिल्टर अपने नियंत्रण के माध्यम से। मेरा विंडोज 200% पर सेट है, मेरा मुख्य रूप स्केलिंग मोड डीपीआई पर सेट किया गया था और सभी रूपों को 100% स्केल (96 डीपीआई) पर डिज़ाइन किया गया था। मैंने स्केलिंग मोड के उत्तराधिकारी के लिए समस्या को ठीक करने के अपने पहले प्रयासों में सबकुछ बदल दिया और यह मेरे लिए काम किया गया, अगर आप फ़ॉन्ट का उपयोग कर रहे हैं या मुझे कोई संदेह नहीं है कि यह वही काम करेगा लेकिन मैंने कोशिश नहीं की है।
के रूप में मेरा 200% यूआई स्केलिंग जब इस विधि factor
बस था बुलाया गया था था {2.0, 2.0} जो मैं तो MenuStrip
की Items
में से प्रत्येक पर ImageScalingSize
बढ़ाने के लिए एक छोटा Image
Button
में पुन: बनाने के लिए इस्तेमाल किया, और और ToolStrip
चूंकि इन्हें स्केलकंट्रोल कॉल प्राप्त नहीं होता है। यदि आपने ऊपर एक्सएमएल कभी नहीं जोड़ा है तो इस विधि को अभी भी बुलाया गया है लेकिन कारक के लिए केवल {1.0, 1.0} होगा, जो सहायक नहीं है। नोट: यदि आप छवि सूची का उपयोग कर रहे हैं तो डिज़ाइनमोड या छविसूची में छवि को गतिशील रूप से सेट न करें और जब आप सहेज लेंगे तो कुछ भी सेट नहीं होगा
यह भी नहीं कि कारक वर्तमान से एक कारक है । आप क्या नोटिस करेंगे यदि आप विभिन्न डीपीआई मॉनीटर के बीच एप्लिकेशन को ले जाते हैं तो आपको 2.0, फिर 0.5, फिर 2.0, फिर 0.5, आदि
अब मेरा WinForms एप्लिकेशन सुपर कुरकुरा दिखता है और यह बिना जाने के WPF UI तत्वों को कॉल कर सकता है पागल! yyayyyyy
आशा इस मदद करता है किसी को
http://www.codeproject.com/Tips/130414/Host-Windows-Form-Controls-in-WPF कृपया इस लिंक पर गौर, मुझे लगता है कि अपने विंडो रूप प्रदान करें विशिष्ट चौड़ाई और ऊंचाई और फिर अपने बच्चे के उपयोगकर्ता नियंत्रण को लोड करने की कोशिश की। चूंकि बच्चे को जोड़ने की सामग्री आपके फॉर्म में जोड़ दी जाती है और यह पता चला है कि इसे और अधिक जगह की आवश्यकता है, यही कारण है कि इसकी सिकुड़ना क्यों है। –
आपकी टिप्पणी अशोक के लिए धन्यवाद। मैंने पैरेंट विंडो के लिए चौड़ाई और ऊंचाई सेट करने की कोशिश की। लेकिन फिर भी वही समस्या मौजूद है ... – balaji
इस पर कोई प्रगति? मेरी भी यही समस्या है। – user958578