2011-02-02 11 views
11

में प्रोग्रामेटिक रूप से एक WPF विंडो बनाने के लिए कैसे करें मेरे पास एक मौजूदा WinForm ऐप है जो अभी पोर्ट को WPF के लिए बहुत अधिक है। हालांकि, मुझे कुछ मुश्किल पारदर्शिता व्यवहार के साथ एक विंडो की आवश्यकता है जिसे मैं WinForm में प्राप्त नहीं कर सकता (हाँ, लेयर विंडोज़ की कोशिश की लेकिन यह कोई नहीं है)।WinForm एप्लिकेशन

डब्ल्यूपीएफ पारदर्शिता व्यवहार की अनुमति देता है जिसे मुझे खूबसूरती और आसानी से चाहिए।

मैं निश्चित रूप से googled, लेकिन केवल WinForm के भीतर एक WPF नियंत्रण बनाने के लिए संकेत मिल सकता है, लेकिन यह मुझे जरूरत नहीं है। मुझे एक अलग WPF विंडो की आवश्यकता है जो मेरे अन्य रूपों से पूरी तरह से स्वतंत्र है।

डब्ल्यूपीएफ विंडो एक साधारण पूर्ण-स्क्रीन और सीमाहीन ओवरले विंडो होगी जहां मैं कुछ सरल चित्रों को प्रत्येक अलग-अलग चित्रों के साथ करूंगा।

मैं WinForm एप्लिकेशन के भीतर एक WPF विंडो कैसे बना सकता हूं?

+0

की तरह कुछ के साथ खिड़की आह्वान इस के लिए मेरे जवाब देने के लिए एक नज़र: http://stackoverflow.com/questions/8311956/open-wpf-window-in-windowsform-app/32691690#32691690 –

उत्तर

13

अपनी परियोजना के लिए आवश्यक WPF संदर्भ जोड़ें, एक WPF Window -instance बनाएं, EnableModelessKeyboardInterop पर कॉल करें और विंडो दिखाएं।

EnableModelessKeyboardInterop पर कॉल सुनिश्चित करता है कि आपकी डब्ल्यूपीएफ विंडो आपके विंडोज फॉर्म ऐप से कीबोर्ड इनपुट प्राप्त करेगी।

देखभाल करें, अगर आप अपनी WPF विंडो के भीतर से एक नई विंडो खोलते हैं, तो कीबोर्ड इनपुट इस नई विंडो में नहीं भेजा जाएगा। आपको इन नव निर्मित विंडोज EnableModelessKeyboardInterop के लिए भी कॉल करना होगा।

अपनी अन्य आवश्यकताओं के लिए, Window.Topmost और Window.AllowsTransparency का उपयोग करें। WindowStyle से None पर सेट करना न भूलें, अन्यथा, पारदर्शिता समर्थित नहीं है।

अद्यतन
निम्नलिखित संदर्भ अपने विंडोज़ में WPF उपयोग करने के लिए जोड़ा जाना चाहिए रूपों आवेदन:

  • PresentationCore
  • PresentationFramework
  • System.Xaml
  • WindowsBase
  • WindowsFormsIntegration
+0

@ हाराल्ड: अगर मेरे उत्तर ने आपकी मदद की है, तो कृपया इसे स्वीकृत उत्तर के रूप में चिह्नित करें। – HCL

+0

आपकी अतिरिक्त जानकारी लिंक अब काम नहीं करते हैं। –

+0

उन्हें हटाया गया, – HCL

6

यहां (परीक्षण) समाधान है। इस कोड का उपयोग WinForm या WPF ऐप दोनों में किया जा सकता है। कोई XAML बिल्कुल आवश्यक नहीं है।

#region WPF 
// include following references: 
// PresentationCore 
// PresentationFramework 
// WindowsBase 

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 
using System.Windows.Shapes; 
#endregion 


public class WPFWindow : Window 
{ 

    private Canvas canvas = new Canvas(); 

    public WPFWindow() 
    { 
     this.AllowsTransparency = true; 
     this.WindowStyle = WindowStyle.None; 
     this.Background = Brushes.Black; 
     this.Topmost = true; 

     this.Width = 400; 
     this.Height = 300; 
     canvas.Width = this.Width; 
     canvas.Height = this.Height; 
     canvas.Background = Brushes.Black; 
     this.Content = canvas; 
    } 
} 

विंडो पृष्ठभूमि पूरी तरह से पारदर्शी है। आप कैनवास पर आकर्षित कर सकते हैं और प्रत्येक तत्व की अपनी पारदर्शिता हो सकती है (जिसे आप इसे आकर्षित करने के लिए ब्रश के अल्फा चैनल को सेट करके निर्धारित कर सकते हैं)। सीधे शब्दों में

WPFWindow w = new WPFWindow(); 
w.Show(); 
+1

+1 जानकारी के लिए धन्यवाद नोट करें कि 'नया सॉलिडकॉलर ब्रश (रंग।एआरजीबी (0,0,0,0) से) 'आप' ब्रश। ब्लैक 'लिख सकते हैं –

संबंधित मुद्दे