2013-04-28 3 views
1

У меня есть проблема с свойствами, заданными в xaml.
Я сделал пользовательский контроль с зависимым свойством «MidiChanel».
Я установил значение этого свойства равным 10 в xaml. В конструкторе пользовательского элемента управления мне нужно это значение, чтобы добавить его в словарь и передать значение дочернему классу моего пользовательского элемента управления.Свойства wpf не заданы после initializecomponent

Проблема в том, что в конструкторе даже после вызова initializecomponents свойство stil имеет значение по умолчанию, а не значение, заданное в xaml. Фактически, он не устанавливается вообще.

Если я изменил свойство «MidiChanel» на нормальное свойство, значение будет установлено, но это не initializecomponents userControl, который устанавливает значение, а initializecomponents главного окна. Call stack = Main.InitializeComponents, конструктор userControl (значения пока недоступны), Setter 'MidiChanel' устанавливается. (кто ?, стек вызовов говорит Main.InitializeComponents).

Я разработчик winforms и считаю все это довольно странным. После Main.InitializeComponents я мог бы перебрать все пользовательские элементы управления на главной странице и сделать все здесь, но это кажется странным делом.

Любые предложения здесь?

ответ

1

вы можете установить метод обратного вызова, который будет поднят, когда ваш dependenyProperty изменил

public int SomeProp 
    { 
     get { return (int)GetValue(SomePropProperty); } 
     set { SetValue(SomePropProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for SomeProp. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty SomePropProperty = 
     DependencyProperty.Register("SomeProp", typeof(int), typeof(yourOwnerclass), new PropertyMetadata(new PropertyChangedCallback(OnSomePropertyChnaged))); 

    public static void OnSomePropertyChnaged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     (d as yourOwnerclass).SomeFunction(); 
    } 
+0

Это нормально, чтобы делать такие вещи, когда свойство установлено, но я хочу сделать что-то, когда все его свойства были установлены. (Что вы ожидали бы после того, как были вызваны функции initializecomponents.) – user2329274

+0

Возможно, вам стоит подумать о том, чтобы сделать это в событии Loaded – user1064519

+0

Это действительно то, что я сделал. На странице. Загруженное событие, я перебираю элементы управления и делаю все здесь. Работает нормально, но с точки зрения разработчика winforms это кажется странным. Спасибо за все входные данные. – user2329274

Смежные вопросы