Только что боролся с той же проблемой, как загрузить и сделать WPF прозрачным с возможностью отображения Flash, потому что если вы включите в главном окне «Разрешить прозрачность», Flash не будет отображаться после запуска приложения.
1) Я использовал WebBrowser Control для воспроизведения файлов Flash (.swf). Они находятся на моем ПК, однако он может воспроизводить их из Интернета или где бы вы их не размещали. Не забудьте назвать свой элемент управления WebBrowser, чтобы перейти к нему в C #.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MyHelper.ExtendFrame(this, new Thickness(-1));
this.MyBrowser.Navigate(@"C:\Happy\Download\flash\PlayWithMEGame.swf");
}
2) Теперь для прозрачности. Я установил в WPF «false» для «Allow Transparency» и установил «Window Style» в «None». После этого я использовал информацию из ЗДЕСЬ и ЗДЕСЬ и создал следующий код, который дал желаемый эффект разрешения прозрачности в MainWindow и одновременного запуска Flash, вот мой код:
public class MyHelper
{
public static bool ExtendFrame(Window window, Thickness margin)
{
IntPtr hwnd = new WindowInteropHelper(window).Handle;
window.Background = Brushes.Transparent;
HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;
MARGINS margins = new MARGINS(margin);
DwmExtendFrameIntoClientArea(hwnd, ref margins);
return true;
}
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
}
struct MARGINS
{
public MARGINS(Thickness t)
{
Left = (int)t.Left;
Right = (int)t.Right;
Top = (int)t.Top;
Bottom = (int)t.Bottom;
}
public int Left;
public int Right;
public int Top;
public int Bottom;
}
И вызвал его из Window_Loaded () + вам нужна строка «ниже», чтобы «DllImport» работал.
using System.Runtime.InteropServices;
using System.Windows.Interop;