2013-06-04 6 views
8

मैं एक साधारण एप्लिकेशन बनाना चाहता हूं जो पारदर्शी है लेकिन 'सामान्य' सीमाएं, बंद बटन, न्यूनतम और अधिकतम बटन को बनाए रखता है।सी # WP33 पारदर्शी विंडो सीमा के साथ

मैं कैसे मानक

<Window 
    WindowStyle="None" 
    AllowsTransparency="True" 
    Background="Transparent"> 
</Window> 

का उपयोग कर खिड़की पारदर्शी बनाने के लिए जानते हैं, लेकिन यह सीमाओं और ऊपरी दाएँ बटन को हटा। मैं इस सूत्र,

Transparent window with a border

जो एक तरह से समाधान देता है पढ़ा है, लेकिन वास्तव में, मैं सिर्फ मानक सीमाओं कि वहाँ होगा रखने के लिए अगर मैं खिड़की पारदर्शी नहीं किया सक्षम होना चाहते हैं। माध्यम मैं खिड़की, आकार बदलना, बंद, आदि स्थानांतरित कर सकते हैं ... क्या यह संभव है?

उत्तर

6

मैं एक साथ फेंक दिया एक त्वरित transparancy कनवर्टर वर्ग based on this tutorial on Microsoft.com आप इस उद्देश्य के लिए उपयोग कर सकते हैं:

using System; 
using System.Runtime.InteropServices; 
using System.Windows; 
using System.Windows.Interop; 

namespace WpfApplication2 
{ 
    class TransparancyConverter 
    { 
     private readonly Window _window; 

     public TransparancyConverter(Window window) 
     { 
      _window = window; 
     } 

     public void MakeTransparent() 
     { 
      var mainWindowPtr = new WindowInteropHelper(_window).Handle; 
      var mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr); 
      if (mainWindowSrc != null) 
       if (mainWindowSrc.CompositionTarget != null) 
        mainWindowSrc.CompositionTarget.BackgroundColor = System.Windows.Media.Color.FromArgb(0, 0, 0, 0); 

      var margins = new Margins 
      { 
       cxLeftWidth = 0, 
       cxRightWidth = Convert.ToInt32(_window.Width) * Convert.ToInt32(_window.Width), 
       cyTopHeight = 0, 
       cyBottomHeight = Convert.ToInt32(_window.Height) * Convert.ToInt32(_window.Height) 
      }; 

      if (mainWindowSrc != null) DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins); 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     public struct Margins 
     { 
      public int cxLeftWidth; 
      public int cxRightWidth; 
      public int cyTopHeight; 
      public int cyBottomHeight; 
     } 

     [DllImport("DwmApi.dll")] 
     public static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref Margins pMarInset); 
    } 
} 

बार जब आप इस में है, तो आपकी XAML करने के लिए पारदर्शी पृष्ठभूमि विशेषता जोड़ने और Window_Loaded घटना की सदस्यता और कॉल MakeTransparent विधि:

<Window etc etc Background="Transparent" Loaded="Window_Loaded"> 

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    var transparancyConverter = new TransparancyConverter(this); 
    transparancyConverter.MakeTransparent(); 
} 

एक स्क्रीनशॉट नीचे है:

Screenshot

+0

बहुत बढ़िया धन्यवाद मैं इसके साथ खेलूँगा –

+0

लगभग काम कर रहा है। ऐसा लगता है जैसे यह विंडो 7 में काम करता है लेकिन विंडो 8 में नहीं। कोई सुझाव? आपका अग्रिम में ही बहुत धन्यवाद! –

+0

@StefanVasiljevic आपको नहीं लगता कि आपको 8 पर बहुत भाग्य प्राप्त होगा, उपर्युक्त कोड एरो का उपयोग करता है जो विंडोज 8 पर मौजूद नहीं है – JMK

1

मैं पहले पृष्ठभूमि रंग के आरजीबी (ए) रंग में (ए) lpha सेटिंग को देखता हूं। अल्फा सेटिंग ऑब्जेक्ट रंग की अस्पष्टता सेट करती है।

हालांकि, मुझे लगता है कि जैसा कि मैं इसे पोस्ट कर रहा हूं, मेरे सामने एक और पोस्ट है जो अधिक संक्षेप में दिखता है और शायद आपके लिए अधिक उपयुक्त होगा।

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