C # - WPF - Изменение наследования моего окна - PullRequest
0 голосов
/ 30 мая 2018

Здравствуйте, сообщество StackOverflow,

У меня возник вопрос относительно наследования окон WPF.

Если вы создаете новое окно, оно наследуется от System.Windows.Window - так что давайте просто скажемЯ хочу, чтобы каждое окно, которое я использую, имело следующий код в своем конструкторе:

MinHeight = Height;
MinWidth = Width;

Итак, моя первая попытка состояла в том, чтобы я создал новый класс с именем BaseWindow и поместил блок кода вконструктор BaseWindow (этот метод я также часто использовал для применения форм, и он работал там).

namespace MyProject.Classes
{
    public class BaseWindow : System.Windows.Window
    {
        public BaseWindow()
        {
            MinHeight = Height;
            MinWidth = Width;
        }
    }
}

Мой BaseWindow класс теперь существует, и теперь япусть мое окно wndLogin наследуется от BaseWindow - что-то вроде этого:

using MyProject.Classes;

namespace MyProject
{
    public partial class wndLogin : BaseWindow
    {

        public wndLogin()
        {
            InitializeComponent();
            InitializeWindow();
        }

        private void InitializeWindow()
        {
            // Initializing window specific stuff
        }
    }
}

Я заметил, что этот класс является частичным, поэтому я также изменил наследование надругая часть класса в файле wndLogin.gics - там написано, что этот файл является автоматически сгенерированным файлом и не должен редактироваться.

namespace MyProject {
    /// <summary>
    /// wndLogin
    /// </summary>
    public partial class wndLogin : System.Windows.Window, System.Windows.Markup.IComponentConnector {
        // auto generated stuff here
    }
}

Когда я его редактируюв любом случае, это репутациямое пользовательское наследование связывается со стандартным наследованием → System.Windows.Window после отладки проекта.


Есть ли способ отключить этот автоматически сгенерированный код или сообщить Visual Studio, чтоон должен использовать другой класс для наследования?


Заранее спасибо!: -)

1 Ответ

0 голосов
/ 30 мая 2018

Не редактируйте вручную wndLogin.g.i.cs, оно генерируется автоматически (как вы узнали).

Чтобы сделать это, вам также нужно изменить файл XAML, чтобы использовать ваше окно:

<local:BaseWindow x:Class="MyNamespace.Window1"
        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:MyNamespace"
        mc:Ignorable="d"
        Title="Window1">
    <Grid>

    </Grid>
</local:BaseWindow>

Обратите внимание на <local:BaseWindow ... вместо Window.Если ваш класс BaseWindow находится в совершенно другом пространстве имен, вам нужно указать это в xaml:

<baseWindowNs:BaseWindow x:Class="MyNamespace.Window1"
        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:MyNamespace"
        xmlns:baseWindowNs="clr-namespace:MyProject.Classes"
        mc:Ignorable="d"
        Title="Window1">
    <Grid>

    </Grid>
</baseWindowNs:BaseWindow>

Ключевой строкой является спецификатор пространства имен: xmlns:baseWindowNs="clr-namespace:MyProject.Classes", а затем использовать ваше пространство именимя вместо local из первого примера.

Единственное другое необходимое изменение - это файл WindowName.xaml.cs для наследования от нового базового класса:

/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : BaseWindow
{
    public Window1()
    {
        InitializeComponent();
    }
}

В качестве альтернативы (и болеев соответствии с соглашениями WPF MVVM) вы можете создать модель базового представления, которая имеет эти свойства и привязать ваш класс окна Height и Width к этим свойствам модели представления.Лично именно так я бы подошел к этому, а не создавал новый базовый класс для Windows.

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