C# GeckoBrowser не будет отображаться в моем окне - PullRequest
0 голосов
/ 28 марта 2020

У меня есть настроенный класс окна, который я вызываю всякий раз, когда я sh отображаю диалоговое окно

public class CustomDialog
{
    internal class CustomDialogWindow : Window
    {
        double posX;
        double posY;

        public CustomDialogWindow(UserControl myUC, double width = double.NaN, double height = double.NaN)
        {
            Width = width;
            Height = height;
            Content = myUC;
            WindowStyle = WindowStyle.None;
            AllowsTransparency = true;
            Padding = new Thickness(-2);
            Background = Brushes.Transparent;
            Loaded += OnWindowLoaded;
            Closing += OnWindowClosing;
            MouseDown += Window_MouseDown;
            MouseMove += Window_MouseMove;
            Activated += Window_Activated;
            RenderTransformOrigin = new Point(0.5, 0.5);
            WindowStartupLocation = WindowStartupLocation.CenterOwner;
            Owner = Application.Current.MainWindow;
        }

        public void OnWindowClosing(object sender, CancelEventArgs e)
        {
            DialogBG.IsHitTestVisible = false;
        }

        public void OnWindowLoaded(object sender, RoutedEventArgs e)
        {
            DialogBG.IsHitTestVisible = true;

            Window myWindow = sender as Window;
            if (myWindow != null)
            {
                QuarticEase qa = new QuarticEase();

                DoubleAnimation slideUpDA = new DoubleAnimation() { 
                    From = 20, 
                    To = 0, 
                    Duration = new Duration(TimeSpan.FromMilliseconds(400)),
                    EasingFunction = qa };
                myWindow.RenderTransform = new TranslateTransform() { Y = 0 };
                myWindow.RenderTransform.BeginAnimation(TranslateTransform.YProperty, slideUpDA);

                DoubleAnimation opacityDA = new DoubleAnimation() { 
                    From = 0, 
                    To = 1, 
                    Duration = new Duration(TimeSpan.FromMilliseconds(400)), 
                    EasingFunction = qa };
                myWindow.Opacity = 0;
                myWindow.BeginAnimation(OpacityProperty, opacityDA);
            }
        }

        private void Window_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (posX < 0 || posX > this.Width || posY < 0 || posY > this.Height)
                this.Close();
        }

        private void Window_MouseMove(object sender, MouseEventArgs e)
        {
            Point p = e.GetPosition(this);

            posX = p.X; // private double posX is a class member
            posY = p.Y; // private double posY is a class member
        }

        private void Window_Activated(object sender, EventArgs e)
        {
            Mouse.Capture(this, System.Windows.Input.CaptureMode.SubTree);
        }
    }
}

И в моей модели представления проекта я создаю экземпляр представления, например CreateProjectView:

    public void CreateProject(object msg)
    {
        //System.Windows.Window myWindow = new System.Windows.Window()
        //{
        //    Content = new CreateProjectView()
        //};
        //myWindow.ShowDialog();
        new CustomDialogWindow(new CreateProjectView(), 1800, 920).ShowDialog();
    }

Конечным результатом является то, что диалоговое окно работает нормально и отображается. Но проблема в том, что у меня есть браузер GeckoFX внутри CreateProjectView, и он должен был перемещаться через 1 секунду в зависимости от загруженного события, но ничего не появляется.

Чтобы попытаться изолировать проблему, я попытался создать окно fre sh и его содержимое устанавливаются с помощью CreateProjectView и показывают, что вместо этого (этот код закомментирован и расположен выше, он внутри метода CreateProject). Конечный результат - он работает так, как задумано, и браузер перемещается.

Теперь мне интересно, что не так с пользовательским классом, который я использую, и почему браузер геккона не отвечает, если это его окно?

...