【发布时间】:2023-03-10 10:52:01
【问题描述】:
我正在尝试在 WPF 应用程序中为我的窗口创建一个基类,但我无法在派生类中访问它们的成员。例如,这里是基本窗口:
namespace MyApp.Windows
{
public class BaseWindow : Window
{
public int MyProp { get; set; }
}
}
这是一个窗口:
public partial class SomeWindow : BaseWindow
{
public SomeWindow()
{
InitializeComponent();
Loaded += SomeWindow_Loaded;
}
private void SomeWindow_Loaded(object sender, RoutedEventArgs e)
{
MyProp = do something;
}
}
如果我这样离开它,MyProp proerty 工作得很好,但我收到一个错误,InitializeComponent() 无法识别。因此,在窗口 xaml 中,我将x:Class 更改如下:
之前
<Window x:Class="MyApp.SomeWindow"
之后
<Window x:Class="MyApp.Windows.BaseWindow"
现在,InitializeComponent() 不再给我任何问题,但 MyProp 突然无法识别。为什么?
如果有帮助,我希望所有窗口在加载后引发一个事件(Loaded 事件被触发),我不想为我拥有的每个窗口编写此代码,所以我以为我可以在基类中编写此代码,从中派生我的窗口,并且一切正常。
编辑:这是所有代码。 BaseWindow.cs(没有其他 xaml):
using System.Windows;
namespace MyApp.Windows
{
public class BaseWindow : Window
{
public int MyProp { get; set; }
}
}
MainWindow.xaml.cs
namespace MyApp.Windows
{
public partial class MainWindow : BaseWindow
{
public MainWindow()
{
InitializeComponent();
}
}
}
MainWindow.xaml:
<myapp:BaseWindow x:Class="MyApp.Windows.BaseWindow"
xmlns:myapp="clr-namespace:MyApp.Windows"
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:MyApp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</myapp:BaseWindow>
【问题讨论】:
标签: c# wpf inheritance window