簡體   English   中英

繼承WPF布局

[英]c# - inheritance WPF layout - Window from Window

我對“窗口”的繼承存在問題,我不明白問題是什么?

我認為,我的布局(MediaLibrary.xaml)必須繼承MainWindow ...但是我不知道該怎么做:/

有2個班級:

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:“ WindowsMediaPlayerV2.MediaLibrary”聲明與基礎類有所不同

EN:“ WindowsMediaPlayerV2.MediaLibrary”的部分聲明不能指定其他基類。我們可以幫我嗎? 謝謝

您不能像您正在嘗試的那樣對可視化.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM