У меня есть настроенный класс окна, который я вызываю всякий раз, когда я 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). Конечный результат - он работает так, как задумано, и браузер перемещается.
Теперь мне интересно, что не так с пользовательским классом, который я использую, и почему браузер геккона не отвечает, если это его окно?