2013-12-08 2 views
0

У меня проблема с моим наследованием «Окно», я не понимаю, в чем проблема?C# - наследование WPF-макет - Окно из окна

Я думаю, мой макет (MediaLibrary.xaml) должны наследовать от MainWindow ... Но я не знаю, как это сделать:/

Есть два класса:

MainWindow.xaml

<Window x:Class="WindowsMediaPlayerV2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MyWindowsMediaPlayer v2" Height="350" Width="525" MinHeight="350" MinWidth="525"> 
    <Grid> 
    </Grid> 
</Window> 

MainWindow.xaml.cs

namespace WindowsMediaPlayerV2 
{ 
    public partial class MainWindow : Window 
    { 

     public MediaLibrary myMediaLibrary = new MediaLibrary(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

MediaLibrary.xaml

<Window x:Class="WindowsMediaPlayerV2.MediaLibrary" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MediaLibrary" Height="350" Width="300" MinHeight="350" MinWidth="300" Closing="Window_Closing"> 
    <Grid> 
    </Grid> 
</Window> 

MediaLibrary.xaml.cs

namespace WindowsMediaPlayerV2 
{ 
    public partial class MediaLibrary : MainWindow //problem here when I run 
    { 
     public MediaLibrary() 
     { 
      InitializeComponent(); 

     } 
    } 
} 

Ошибка при запуске:

FR: Les декларациях partielles определим 'WindowsMediaPlayerV2.MediaLibrary' doivent pas spécifier des classes de base différentes

RU: Частичные объявления 'WindowsMediaPlayerV2.MediaLibrary' не должны указывать разные базовые классы Можем ли мы помочь мне? Спасибо

ответ

3

Вы не можете подклассифицировать визуальный класс .XAML, который вы пытаетесь. Только классы, созданные в коде C#, могут быть унаследованы.

Теперь вы можете создать свою собственную визуальную тему окна по стилю, цветам и т. Д. (Или сделать код), а затем создать свои классы на этом классе из кода.

public class MyWindow : Window 
{ 
    public class MyWindow() 
    { 
     SomeProperty = SomeValue; 
    } 

    protected void SomeCustomFunction(int AnyParameter) 
    { 
     SomethingCommon = AnyParameter; 
    } 

    etc... 
} 

Создайте свой проект, чтобы этот класс был известен/доступен для целей деривации.

Теперь, когда вы создаете окно на основе .XAML, создайте его по умолчанию на основе «Окно». Затем измените оба ваши .XAML.cs и ваши версии .cs и изменить ссылку на ваш "MyWindow" класса что-то вроде ...

От

<Window x:Class="blah... 

в

<myLib:MyWindow x:Class="blah 
    xmlns:myLib="clr-namespace:MyWpfClassLibrary" 

в XAML, вам также нужно будет добавить ссылку на пространство имен библиотеки классов, например ... xmlns, если ваш класс окна находится в другом пространстве проекта/пространства имен. «MyLib» похож на «псевдоним» этой библиотеки классов, поэтому его можно использовать в остальной части XAML, он знает, как/где разрешать ссылки на классы.

В.CS-код, изменение

public partial class blah : Window 

в

public partial class blah : MyWindow 

Если библиотека классов находится в том же пространстве имен, вы должны быть хорошо идти. Если нет, вы можете либо добавить

using MyLibrary; before the public partial class -- OR 

public partial class blah : MyLibrary.MyWindow 
Смежные вопросы