0

При написании кода на - XAML, появляется ошибка, следующего вида:

Код - XDG0003. Ошибка: Ссылка на объект не указывает на экземпляр объекта. Строка - 19.

При запуске программы в редакторе VisualStudio 2022, ошибка исчезает (сборка завершена успешна), ничего не появляется, завершает программа и снова показывает ошибку.

Программа в создана в проекте - Приложение WPF (NET.Framework 4.8)

введите сюда описание изображения

Код - MainWindow.xaml:

<Window
x:Class="Debris_Cleaner.MainWindow"
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:local="clr-namespace:Debris_Cleaner"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vml="clr-namespace:Debris_Cleaner.MVVM.ViewModel"
Title="MainWindow"
Width="800"
Height="450"
AllowsTransparency="True"
Background="Transparent"
ResizeMode="CanResize"
WindowStyle="None"
mc:Ignorable="d">

<Window.DataContext> <vml:MainViewModel /> </Window.DataContext>

<DockPanel Margin="7" Background="#1E1E1E"> <Border Height="28" Background="#252525" DockPanel.Dock="Top">

    &lt;Border.InputBindings&gt;
        &lt;MouseBinding Command=&quot;{Binding MoveWindowCommand}&quot; MouseAction=&quot;LeftClick&quot; /&gt;
    &lt;/Border.InputBindings&gt;

    &lt;Grid&gt;
        &lt;Grid.ColumnDefinitions&gt;
            &lt;ColumnDefinition /&gt;
            &lt;ColumnDefinition Width=&quot;100&quot; /&gt;
        &lt;/Grid.ColumnDefinitions&gt;

        &lt;TextBlock
            Margin=&quot;100,0,0,0&quot;
            HorizontalAlignment=&quot;Center&quot;
            VerticalAlignment=&quot;Center&quot;
            FontFamily=&quot;Consolas&quot;
            Foreground=&quot;LightGray&quot;
            Text=&quot;Derbis Cleaner 1.0&quot; /&gt;
        &lt;StackPanel
            Grid.Column=&quot;1&quot;
            Margin=&quot;0,0,4,0&quot;
            HorizontalAlignment=&quot;Right&quot;
            Orientation=&quot;Horizontal&quot;&gt;
            &lt;Button Command=&quot;{Binding MinimizewWindowCommand}&quot; Content=&quot;▂&quot; /&gt;
            &lt;Button Command=&quot;{Binding MaximizeWindowCommand}&quot; Content=&quot;&quot; /&gt;
            &lt;Button Command=&quot;{Binding ShutdownWindowCommand}&quot; Content=&quot;✖️&quot; /&gt;
        &lt;/StackPanel&gt;
    &lt;/Grid&gt;
&lt;/Border&gt;

&lt;Border
    Width=&quot;48&quot;
    HorizontalAlignment=&quot;Left&quot;
    Background=&quot;#252525&quot;&gt;
    &lt;Border.Style&gt;
        &lt;Style&gt;
            &lt;Style.Triggers&gt;
                &lt;EventTrigger RoutedEvent=&quot;Border.MouseEnter&quot;&gt;
                    &lt;EventTrigger.Actions&gt;
                        &lt;BeginStoryboard&gt;
                            &lt;Storyboard&gt;
                                &lt;DoubleAnimation
                                    Storyboard.TargetProperty=&quot;(Border.Width)&quot;
                                    To=&quot;120&quot;
                                    Duration=&quot;0:0:.1&quot; /&gt;
                            &lt;/Storyboard&gt;
                        &lt;/BeginStoryboard&gt;
                    &lt;/EventTrigger.Actions&gt;
                &lt;/EventTrigger&gt;

                &lt;EventTrigger RoutedEvent=&quot;Border.MouseLeave&quot;&gt;
                    &lt;EventTrigger.Actions&gt;
                        &lt;BeginStoryboard&gt;
                            &lt;Storyboard&gt;
                                &lt;DoubleAnimation
                                    Storyboard.TargetProperty=&quot;(Border.Width)&quot;
                                    To=&quot;48&quot;
                                    Duration=&quot;0:0:.1&quot; /&gt;
                            &lt;/Storyboard&gt;
                        &lt;/BeginStoryboard&gt;
                    &lt;/EventTrigger.Actions&gt;
                &lt;/EventTrigger&gt;

            &lt;/Style.Triggers&gt;
        &lt;/Style&gt;
    &lt;/Border.Style&gt;

    &lt;StackPanel&gt;
        &lt;RadioButton
            Content=&quot;Очистка&quot;
            FontSize=&quot;16&quot;
            FontWeight=&quot;Normal&quot;
            Foreground=&quot;LightGray&quot; /&gt;

        &lt;RadioButton
            Content=&quot;Очистка&quot;
            FontSize=&quot;16&quot;
            FontWeight=&quot;Normal&quot;
            Foreground=&quot;LightGray&quot; /&gt;

        &lt;RadioButton
            Content=&quot;Очистка&quot;
            FontSize=&quot;16&quot;
            FontWeight=&quot;Normal&quot;
            Foreground=&quot;LightGray&quot; /&gt;
    &lt;/StackPanel&gt;

&lt;/Border&gt;

&lt;ContentPresenter /&gt;

</DockPanel>

Код - MainViewModel.cs:

using Debris_Cleaner.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Debris_Cleaner.MVVM.ViewModel { internal class MainViewModel : ObservalObject {

/* Команды */

public RelayCommand MoveWindowCommand { get; set; }
public RelayCommand ShutdownWindowCommand { get; set; }
public RelayCommand MaximizeWindowCommand { get; set; }
public RelayCommand MinimizewWindowCommand { get; set; }

private object _currentView;

public object CurrentView
{
    get { return _currentView; }
    set
    {
        _currentView = value;
        OnPropertyChanged();
    }
}

public MainViewModel()
{
    Application.Current.MainWindow.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;

    MoveWindowCommand = new RelayCommand(o =&gt; { Application.Current.MainWindow.DragMove(); });
    ShutdownWindowCommand = new RelayCommand(o =&gt; { Application.Current.Shutdown(); });
    MaximizeWindowCommand = new RelayCommand(o =&gt;
    {
        if (Application.Current.MainWindow.WindowState == WindowState.Maximized)
            Application.Current.MainWindow.WindowState = WindowState.Normal;
        else
            Application.Current.MainWindow.WindowState = WindowState.Maximized;
    });
    MinimizewWindowCommand = new RelayCommand(o =&gt; { Application.Current.MainWindow.WindowState = WindowState.Minimized; });
    }
}

}

pascarma
  • 5
  • 4
  • DataContext в XAML плохо, уберете его от туда, скорей всего и избавитесь от ошибки. Также вот это Application.Current.MainWindow.MaxHeight тоже нарушение, ибо VM слой не должен знать ничего про View, а окно это View слой. Смена состояния окна - это задача View, в VM вы можете лишь сделать enum на основе которого, через привязки и триггеры будет меняться состояние. – EvgeniyZ Jul 18 '23 at 16:06

1 Answers1

0

У меня возникла такая же ошибка. Методом проб и комментариев, выяснил, что использование Application в конструкторе вызывает эту ошибку.