Значение второго размера изменяется после Loaded

У меня есть простой шаблон MVVM, где у меня есть ViewModel и View (только 2 проблемы в этом случае):

ViewModel:

public class LoginWindowViewModel : Bases.ViewModelBase
{
    private double _width = 400;
    public double Width
    {
        get { return _width; }
        set { SetProperty(ref _width, value); }
    }

    private double _height = 500;
    public double Height
    {
        get { return _height; }
        set { SetProperty(ref _height, value); }
    }

    private BitmapImage _backgroundImage = null;
    public BitmapImage BackgroundImage
    {
        get
        {
            if (_backgroundImage == null) _backgroundImage = Model.Imagining.GetRandomImage((int)Width, (int)Height);
            return _backgroundImage;
        }
    }

}

Посмотреть:

public partial class LoginWindow : Window
{
    public LoginWindowViewModel ViewModel
    {
        get { return (LoginWindowViewModel)DataContext; }
    }

    public LoginWindow()
    {
        InitializeComponent();
    }
    private void mainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Open();
    }



    public void Open()
    {
        Open(Settings.Default.AnimationDuration);
    }
    public void Open(Duration animDuration)
    {
        UpdateLayout();
        mainWindow.Clip = new EllipseGeometry(new Point(mainWindow.Width / 2, mainWindow.Height / 2), 0, 0);
        double radius = MathFunctions.CalculatePitagoras(mainWindow.Width, mainWindow.Height) / 2;

        Animations.RadiusXAnimation((EllipseGeometry)mainWindow.Clip, radius, animDuration);
        Animations.RadiusYAnimation((EllipseGeometry)mainWindow.Clip, radius, animDuration);
    }

}

Посмотреть XAML:

<Window x:Name="mainWindow" x:Class="Gestionale.View.LoginWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Gestionale.View"
    xmlns:viewModels="clr-namespace:Gestionale.ViewModel"
    xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
    mc:Ignorable="d"
    Style="{DynamicResource MaterialDesignCardWindow}"
    Background="{x:Null}"
    Title="LoginWindow" WindowStartupLocation="CenterScreen" ResizeMode="NoResize"
    Width="{Binding Width, Mode=TwoWay}"
    Height="{Binding Height, Mode=TwoWay}"
    Loaded="mainWindow_Loaded">
    <Window.DataContext>
        <viewModels:LoginWindowViewModel />
    </Window.DataContext>
    <Grid x:Name="mainGrid">
        <Image Source="{Binding BackgroundImage}" Margin="-1" />
        <Rectangle Fill="{DynamicResource PrimaryHueMidBrush}" />
        <Grid>
        ...
        </Grid>
    </Grid>
</Window>

Итак, как вы можете видеть, я сделал простую привязку между ViewModel и View, где Высота и Ширина установлены в ViewModel, где причина в том, что когда я получаю изображение, которое загружается из Интернета, оно автоматически привязывается к изображению представления, Я хочу сделать анимацию открытия, как только Window будет загружен, и будет выглядеть так:

public MainWindow()
    {
        if(LoggedUser == null)
        {
            LoginWindow newLoginWindow = new LoginWindow();
            newLoginWindow.ShowDialog();
        }
        InitializeComponent();
    }

Но моя точная проблема заключается в том, что когда я вызываю событие Loaded, одно из значений (либо Ширина, либо Высота, это зависит от позиции, в которой оно связано в XAML) отличается, и оно изменяется ПОСЛЕ вызова Loaded, что я проверил создание точки останова для события SizeChanged (которого здесь нет). В основном (в данном случае) это происходит так: Инициализировано (ширина: случайная, высота: случайная) -> Ширина: 400 Высота: Случайная (749 в моем случае каждый раз по какой-то причине) -> Загружен -> Ширина: 400 Высота: 500

Если я переворачиваю позицию привязки в XAML в значение "Высота во-первых" и "Ширина во-вторых", это та же самая ситуация, но высота корректна и ширина изменяется после загрузки. Это большая проблема для меня, так как я пытаюсь сделать правильную анимацию, но центральная точка для меня другая.

0 ответов

Другие вопросы по тегам