Mam okno WPF, które musi zachowywać się jak nakładka okna w uruchomionej aplikacji innej firmy. Moje okno WPF musi być przeważnie przezroczyste, z pewnymi widocznymi kontrolkami, zawsze powinno być umieszczone na górze drugiego okna w kolejności Z, poruszać się z nim itp. Krótko mówiąc: chcę, aby zachowywało się jak okno podrzędne.Okno potomka programu WPF znajdujące się w aplikacji innej firmy niewidoczne w systemie Windows 7 Tematy Aero
Przeglądałem oferowane techniki: here (technika WPF HwndSource) i here (technika WPF SetParent). Technika HwndSource w ogóle nie działa. Technika SetParent działa w systemie Windows 7, ale tylko z podstawowym motywem. Z motywami Windows 7 Aero nie działa: moje okno potomne jest niewidoczne.
Szukam rozwiązania, które będzie działać na wszystkich motywów systemu Windows 7.
Moja aplikacja testowa tworzy okno testowe i wywołuje funkcję SetParent, aby uczynić ją okienkiem podrzędnym okna (o zakodowanym twardym sygnaturce) w oknie Notepad.
ramach podstawowego tematu, to wygląda tak:
Pod Windows 7 Theme, nie widzę go:
okna potomnego XAML:
<Window x:Class="WpfApplication22.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestWindow" Height="300" Width="300" Background="#63000000" ShowInTaskbar="False" WindowStyle="None" Initialized="Window_Initialized" Loaded="Window_Loaded" AllowsTransparency="True">
<Grid>
<Ellipse Height="87" HorizontalAlignment="Left" Margin="12,12,0,0" Name="ellipse1" Stroke="Black" VerticalAlignment="Top" Width="167" Fill="#FFBE3A3A" />
</Grid>
</Window>
Kod okna obsługi ładunkowej dziecka:
var parentHwnd = new IntPtr(0x01DE0DFC); // Running Notepad
var guestHandle = new WindowInteropHelper(this).Handle;
var style = WS_VISIBLE | WS_CLIPSIBLINGS | WS_CHILD | WS_POPUP;
SetWindowLong(guestHandle, GWL_STYLE, (int)(style));
SetParent(guestHandle, parentHwnd);
(Próbowałem odtworzyć styl WS_POPUP. Nie ma to żadnego wpływu.)
Tylko myśl, czy próbowałeś badań z dowolnego okna (słownie calc.exe) inne niż Notatnik? Nie mam teraz dostępu do komputera z systemem Windows 7, ale mogę odtworzyć problem za pomocą notatnika, ale nie za pomocą programu calc.exe, używając dokładnie swojego kodu w systemie Windows 8. W systemie Windows 8 z kodem zostanie wyświetlone okno podrzędne w notatniku , ale gdy tylko aktywuję okno notatnika, okno potomne staje się niewidoczne, więc myślę, że może notatnik robi coś, aby zachować jego pole tekstowe na wszystko inne dzieci. –
Hmmm ... dziękuję za tę myśl, @AndreiPana. Będę testował z innymi oknami i sprawdzę, jak to działa również w systemie Windows 8. –