пусть window1.xaml.vb наследуется от MyWindow - PullRequest
0 голосов
/ 15 декабря 2009

Я хочу создать окно в ControlLibrary под названием MyWindow, чтобы я мог определить стандартный вид для всех моих новых приложений (например, я хочу поместить значок в MyWindow) и некоторую базовую логику, чтобы я мог наследовать от этого окно в других Wpf-приложениях.

Но если я пытаюсь унаследовать MyWindow в другом приложении, я получаю сообщение об ошибке ...

Может кто-нибудь дать мне подсказку, как я могу решить эту проблему?


У меня есть проекты буксира: 1. мой ControlLib, где я определяю базовое окно 2. Проект, в котором я хочу использовать свою базу в качестве основного окна

Мое базовое окно выглядит следующим образом:

<Window x:Class="BaseWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Icon="GeoAS.ico"
Title="BaseWindow" Height="300" Width="300"
Background="black">
  <Grid>

  </Grid>
</Window>

Это в Пространстве имен MyControllLib. Я добавил этот Lib в качестве ссылки на мой проект, где я хочу использовать это окно в качестве основного окна.

Я ожидал поставить что-то вроде этого, это мой Codebehind из нового окна:

Class Window1
Inherits MyControlLib.BaseWindow

End Class

Но компилятор выдал ошибку (я должен перевести, потому что ошибка на немецком языке): Базовый класс Window1-Class не должен отличаться от myControlLib.BaseWindow-Baseclass.

Понятия не имею, что делать

Ответы [ 2 ]

0 голосов
/ 16 декабря 2009

Ваш класс BaseWindow должен быть в чистом коде. Как это:

public class BaseWindow : Window
{
    public BaseWindow()
    {
        // Code modified here
        Uri iconUri = new Uri("pack://application:,,,/MyControlLib;component/my.ico", UriKind.RelativeOrAbsolute);
        Icon = BitmapFrame.Create(iconUri);
        Title = "BaseWindow";
        Height = 300;
        Width = 300;
        Background = Brushes.Black;
    }
}

и ваш производный класс может быть либо в чистом коде, либо в xaml, и кодировать оба. В первом случае вам нужно сделать следующее:

public partial class Window1 : BaseWindow
{
    public Window1()
    {
        InitializeComponent();
    }
}

но во втором случае вам также нужно управлять своим xaml, например:

<local:BaseWindow x:Class="ErrorTemplatePOC.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyControlLib;assembly=MyControlLib">
</local:BaseWindow>
0 голосов
/ 15 декабря 2009

Если вы хотите наследовать от класса (MyWindow в вашем случае), вам нужно объявить его в чистом коде, xaml не допускается, так как xaml не может наследоваться.

Вы можете сделать корневой тег вашего xaml классом, который вы также определили. Здесь вы должны вывести свой базовый класс из Window, а затем вы можете вывести свои классы Windows из вашего базового класса. извините, я не знаю vb.net, поэтому этот код находится в C #

public class MyWindow : Window
{
    .....//your basic logic here
}

вы можете получить классы вашей страницы из такого класса:

public partial class MyDeriveClass : MyWindow
{
    .............
}

и в вашем xaml напишите

<y:MyWindow y="add your Namesapace here" and add other attribute of Page also like default namespace and xmlns:x>
    ...............
</y:MyWindow>

Надеюсь, это поможет !!

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