从WPF窗口继承?

时间:2018-02-23 06:46:36

标签: wpf xaml inheritance

我有一个窗口应该在两个应用程序之间相同,除了一些点。 我想继承它来创建一个子类(没有XAML),只在构造函数中进行一些自定义(如窗口标题)。

这可能吗?

2 个答案:

答案 0 :(得分:1)

  

这可能吗?

创建一个继承自pip install flask pip install werkzeug

的类
System.Windows.Window

...并在代码隐藏中更改窗口的基类以使用此类:

public class YourBaseClass : Window
{
    public YourBaseClass() : base()
    {
        Title = "Common Title";
    }
}

......在XAML中:

public partial class MainWindow : YourBaseClass
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

答案 1 :(得分:0)

与窗体表单不同,WPF没有可视继承。您可以参考此post了解原因。

因此,我们不能在这里使用继承。但是,您可以向Windows类添加自定义属性,并根据属性进行自定义。

假设我想用不同的“标题”创建两个类似的窗口(这只是一个例子,我知道窗口有一个Title属性):

xaml.cs中的

public WindowTest //constructor 
{
   InitializeComponent(); 
   this.Loaded+=WindowTest_Loaded; 
}

private void WindowTest_Loaded(object sender, RoutedEventArgs e)
{
    //Please note that custom property wont be set until Windows is loaded.
    //Your customization here
    this.Title = TitleText; 
}

public string TitleText
{
    get { return GetValue( Property1Property ).ToString(); }
    set { SetValue( TitleTextProperty, value ); }
}

// Using a DependencyProperty as the backing store for Property1.  
// This enables animation, styling, binding, etc...
public static readonly DependencyProperty TitleTextProperty 
    = DependencyProperty.Register( 
      "TitleText", 
      typeof( string ), 
      typeof( WindowTest ), 
      new PropertyMetadata( String.Empty ) 
  );   

in xaml

<Grid>
    <test:WindowText TitleText = "Hello World"/>  //first window
    <test:WindowText TitleText = "I Hate You"/>  //second window
</Grid>