У меня есть пара проектов WPF, над которыми я работаю в сообществе Visual Studio 2019. Одна - это библиотека управления, а другая - приложение, использующее библиотеку управления.
В управляющей библиотеке у меня есть класс ExteraWindow
, полученный из класса System.Windows.Window
. Соответствующий код для этого класса выглядит примерно так:
namespace Extera.Presentation.Control
{
public class Window : System.Windows.Window
{
static Window()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Window),
new System.Windows.FrameworkPropertyMetadata(typeof(Window)));
}
public Window()
: base()
{
// initialize the MenuItems collection
MenuItems.CollectionChanged += Items_CollectionChanged;
}
public ObservableCollection<MenuItem> MenuItems { get; } = new ObservableCollection<MenuItem>();
private void Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// some code here
}
// some more class members here
}
}
Код для класса MenuItem
выглядит следующим образом:
public class MenuItem
{
public MenuItem()
{
Caption = "";
Title = "";
}
public string Title { get; set; }
public string Caption { get; set; }
}
Класс ExteraWindow
используется в Приложение выглядит так:
<control:Window x:Class="App.MainWindow"
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:Extera.App.ProjectManager"
xmlns:control="clr-namespace:Extera.Presentation.Control;assembly=Extera.Presentation.Control"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<control:ExteraWindow.MenuItems>
<control:MenuItem Title="aaaa" Caption="bbbb" />
</control:ExteraWindow.MenuItems>
<Border BorderBrush="White" BorderThickness="2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Foreground="White">a;osidjflsodjfo;sdjg</Label>
</Grid>
</Border>
</control:ExteraWindow>
Код компилируется и работает нормально. Если я устанавливаю точку останова в методе Items_CollectionChanged
класса ExteraWindow
, то точка останова срабатывает один раз, и это для добавления элемента MenuItem
с Title
"aaaa" и Caption
"bbbb" , что именно то, что я ожидал.
Но проблема в конструкторе MainWindow
. Вот скриншот:
Итак, мой вопрос: как я могу устранить эту ошибку? Компилятор, конечно, ни на что не жалуется, так что это проблема только дизайнера. Есть ли какие-либо атрибуты, которыми мне нужно украсить мое свойство MenuItems
? Или что-то еще, что я пропустил?
Спасибо, Тиби.
Редактировать:
Заметил, что класс MenuItem
был опубликован только с конструктором, пропуская свойства для Title
и Caption
. Я добавил их сейчас, для полноты.