2009-04-19 13 views
7

Mam okno z tych wartości:Tworzenie przezroczystego otwór wewnątrz okna tła - WPF

WindowState="Maximized" 
AllowsTransparency="True" 
Opacity="0.5" 
WindowStyle="None" 

Okno to przychodzi na szczycie drugiego okna (jako pop-up) z zawartością na nim na konkretna lokalizacja.

Mam nowe wymagania. To okno musi pokazać obszar prostokąta z poniższego okna. Innymi słowy, muszę ustawić "dziurę" w tym oknie, która będzie całkowicie przezroczysta (bez wartości krycia). Do tego momentu nie mogłem wymyślić sposobu na stworzenie tej przezroczystej dziury.

Nadzieja, aby zorientować ...

Odpowiedz

3

unikać AllowsTransparency = true, jest bardzo buggy i powolne.

można PInvoke SetWindowRgn do utworzenia okna o dowolnym kształcie:

  1. Używaj CreateRectRgn dwa razy, raz na okna prostokąt, a raz do otworu.
  2. Zastosowanie CombineRgn z RGN_AND jako 4. parametru uzyskania region z otworem w nim
  3. połączeń SetWindowRgn zastosować ten region do okna
  4. Nie zapomnij usunąć wszystkie regiony z wyjątkiem tego, który przeszedł do SetWindowRgn
+0

Dzięki za odpowiedź, znalazłem to trochę niemożliwe, aby utworzyć obszar szyby z otworem w środku ... A może znasz sposób na zrobienie tego? – Satumba

+0

Dodałem instrukcje dotyczące tworzenia regionu z dziurą. – Nir

+0

Dzięki stary, chociaż zdecydowałem się użyć mojego rozwiązania, zaznaczyłem twoją sugestię jako odpowiedź. – Satumba

9

znalazłem rodzaju rozwiązania dla niego:

to okno pop-up, które na górze innym oknem, a zawierająca otwór do innego okna w pożądanym miejscu:

Nagłówek

Window: Treść

WindowState="Maximized" 
    AllowsTransparency="True" 
    WindowStyle="None" 

Window:

<Window.Background > 
    <SolidColorBrush x:Name="BackgroundBrush" Color="WhiteSmoke" Opacity="0" ></SolidColorBrush> 
</Window.Background> 
<Canvas x:Name="ContectHolder" > 
    <Path Stroke="Black" Fill="WhiteSmoke" Opacity="0.8"> 
     <Path.Data> 
      <CombinedGeometry GeometryCombineMode="Exclude"> 
       <CombinedGeometry.Geometry1 > 
        <RectangleGeometry Rect="0,0,2000,2000" /> 
       </CombinedGeometry.Geometry1> 
       <CombinedGeometry.Geometry2> 
        <RectangleGeometry Rect="75,75,400,900" /> 
       </CombinedGeometry.Geometry2> 
      </CombinedGeometry> 
     </Path.Data> 
    </Path> 
</Canvas> 
Powiązane problemy