come impostare lo z-index windowsformhost che non sono sempre in cima all'elemento WPF?WindowsFormsHost è sempre il massimo dall'elemento WPF
risposta
Secondo MSDN (Layout Considerations for the WindowsFormsHost Element)
Un ospitato controllo Windows Form è disegnato in un HWND separata, quindi è sempre disegnato sulla parte superiore di elementi WPF.
Si tratta di una limitazione di progettazione
Un altro buon articolo di MSDN che spiega possibili problemi quando si utilizzano diverse tecnologie grafiche in Windows è Technology Regions Overview
Tuttavia googling ho scoperto che ci sembrano essere alcuni hackings per questo (conosciuta come restrizione dello spazio aereo)
una trucco (mai provato personalmente quindi non so se funziona) è a this link
link "hack" 403s – RJFalconer
Update, pochi anni dopo (2016-09):
mio seguente risposta, come ha fatto notare il commento in alto, non è più valido, e non era disponibile nella versione finale di .NET 4.5, o versioni successive. Sfortunatamente, il collegamento che ho incluso ha ancora informazioni su Z per HwndHosts presenti per la "versione corrente" di .NET, che potrebbe indurre alcuni a credere che questa funzionalità, in realtà, esista. Non è così. Non c'è soluzione.
risposta originale:
Un anno dopo, le cose sono cambiate un po 'con .NET 4.5. Per coloro che inciampato su questo, tanto quanto me, ecco un estratto più aggiornato dal Walkthrough: Arranging Windows Forms Controls in WPF su MSDN:
Per impostazione predefinita, gli elementi WindowsFormsHost visibili sono sempre disegnati in cima ad altri elementi WPF, e sono non influenzato da z-order. Per abilitare l'ordine z, impostare la proprietà IsRedirected di WindowsFormsHost su true e la proprietà CompositionMode su Full o OutputOnly.
Tutto quello che devi fare, quando si utilizza .NET 4.5, è aggiungere i seguenti attributi per il vostro elemento WindowsFormsHost IsRedirected="True"
e CompositionMode="Full"
oCompositionMode="OutputOnly"
.
Controllato oggi - queste proprietà erano solo nella versione beta di .net 4.5. sfortunatamente non si sono fatti strada verso il rilascio normale. –
1.3.10 Windows Presentation Foundation (WPF) 1.3.10.1 La funzionalità HwndHost è stata rimossa da WPF in .NET Framework 4.5 Beta L'anteprima di .NET Framework 4.5 include una funzionalità di reindirizzamento HwndHost di WPF. Tuttavia, questa funzione aveva diversi problemi noti ed è stata rimossa dalla versione beta di .NET Framework 4.5. Non sarà incluso in nessuna versione futura. Per risolvere questo problema: Nessuna soluzione è disponibile. – lukaszk
Come si usa in .NET 4? È possibile? – mrhands
Ho appena incontrato lo stesso problema.
C'è un potenziale soluzione - a seconda della natura del controllo della finestra Host di Windows e l'elemento WPF che si desidera visualizzare:
ho legato il controllo WindowsFormsHost
del Visibility
a una proprietà sul mio modello al fine di consentire me per nascondere l'host (e i controlli su di esso) quando voglio visualizzare il WPF che vogliamo visualizzare su di esso.
Nella mia situazione il mio WindowsFormsHost è in una griglia a due righe.La riga inferiore ha uno StackPanel al suo interno che cambia Altezza a seconda di cosa contiene. Gestisco l'evento LayoutUpdated di StackPanel per ridimensionare il mio WindowsFormsHost sottraendo ActualHeight da Grid's ActualHeight. Assicurati di utilizzare ActualHeight non Height.
void ResizeWinhost()
{
mainGrid.UpdateLayout();
detailPanel.UpdateLayout();
winHost.Height = mainGrid.ActualHeight - detailPanel.ActualHeight - 5;
}
Risposta semplice: non è possibile. Vedi [qui] (http://stackoverflow.com/questions/8006092/controls-dont-show-over-winforms-host). – Clemens