Получение "уже было зарегистрировано "" ошибка в WPF
у меня есть пользовательский элемент управления в WPF, который имеет привязку к свойству зависимостей. Когда я пытаюсь скомпилировать приложение, я получаю "имя свойства", уже зарегистрированное ошибкой "ControlName", и конструктор показывает "не удается создать экземпляр ошибки "User Control".
вот как выглядит мой простой элемент управления:
ExampleUserControl.язык XAML:
<UserControl x:Class="ExampleApp1.ExampleUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ExampleApp1"
mc:Ignorable="d" >
<TextBox Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ExampleUserControl}}, Path=SomeStringValue}" />
</UserControl>
ExampleUserControl.код XAML.cs:
public partial class ExampleUserControl : UserControl
{
public DependencyProperty SomeStringValueProperty = DependencyProperty.Register("SomeStringValue", typeof(string), typeof(ExampleUserControl));
public string SomeStringValue
{
get
{
return GetValue(SomeStringValueProperty) as string;
}
set
{
SetValue(SomeStringValueProperty, value);
}
}
public ExampleUserControl()
{
InitializeComponent();
}
}
Главная Окно размещено в:
<Window x:Class="ExampleApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ExampleApp1"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<local:ExampleUserControl SomeStringValue="Test 1" />
<local:ExampleUserControl SomeStringValue="Test 2" />
</StackPanel>
</Window>
вот как выглядит дизайнер:
вот как выглядит конструктор XAML:
2 ответов
что происходит, свойство зависимостей регистрируется несколько раз под тем же именем и владельцем. Свойства зависимостей предназначены для одного владельца и должны статически создаваться. Если вы не статически их экземпляр, будет предпринята попытка зарегистрировать их для каждого экземпляра элемента управления.
сделайте объявление DependencyProperty статическим. Измените его с:
public DependencyProperty SomeStringValueProperty = DependencyProperty.Register("SomeStringValue", typeof(string), typeof(ExampleUserControl));
в:
public static DependencyProperty SomeStringValueProperty = DependencyProperty.Register("SomeStringValue", typeof(string), typeof(ExampleUserControl));
мое сообщение об ошибке этого типа было вызвано регистрацией свойства зависимости с базовым классом
Я.этот
public static readonly DependencyProperty WorkerStateProperty =
DependencyProperty.Register("WorkerState", typeof(State), typeof(Control),
new FrameworkPropertyMetadata(State.Stopped, new PropertyChangedCallback(OnWorkerStateChanged)));
вместо
public static readonly DependencyProperty WorkerStateProperty =
DependencyProperty.Register("WorkerState", typeof(State), typeof(WorkerControl),
new FrameworkPropertyMetadata(State.Stopped, new PropertyChangedCallback(OnWorkerStateChanged)));
где мой класс WorkerControl производный от Control