Как можно разместить Flash-контент в приложении WPF и использовать прозрачность? - PullRequest
2 голосов
/ 16 сентября 2008

Как я могу разместить флеш-контент внутри формы WPF и при этом использовать прозрачность / альфа в моем окне WPF? Размещение элементов управления флэш-памятью WinForms не позволяет этого.

Ответы [ 4 ]

2 голосов
/ 16 сентября 2008

Если элемент управления, используемый для отображения содержимого Flash, не встроен в WPF, вы столкнетесь с этими проблемами "воздушного пространства". Каждая технология отображения от Win32 до WinForms использовала HWND «под капотом», но WPF использует DirectX. Однако диспетчер окон в Windows по-прежнему понимает только HWND, поэтому приложения WPF имеют одно окно на основе HWND верхнего уровня, и все, что под этим делается в DirectX (на самом деле такие вещи, как контекстные меню и всплывающие подсказки, также имеют HWND верхнего уровня) , Адам Натан очень хорошо описывает взаимодействие WPF в этой статье .

1 голос
/ 16 сентября 2008

Хотя я этого не сделал, вы, вероятно, можете использовать элемент управления WebBrowser из WPF 3.5 sp1, чтобы обернуть ваш Flash-контент в WPF. Я не уверен, как это повлияет на прозрачность.

0 голосов
/ 16 марта 2014

Только что боролся с той же проблемой, как загрузить и сделать 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;
0 голосов
/ 16 сентября 2008

Можно ли использовать Expression для преобразования содержимого флэш-памяти в XAML? Я полагаю, что есть инструменты там или вне, которые делают это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...