Создан Bindable WindowsFormsHost, но дочернее обновление не отражается для управления

Я столкнулся с проблемой, когда я хочу привязать элемент управления к элементу управления windowsFormsHost. Но, как мы все знаем, свойство Child не является DP, поэтому я создал оболочку.

/// <summary>
    ///     Bindable version of windows form hosts
    /// </summary>
    public class BindableWindowsFormsHost : WindowsFormsHost
    {
        /// <summary>
        /// Max value of the textbox
        /// </summary>
        public Control BindableChild
        {
            get { return (Control)GetValue(BindableChildProperty); }
            set 
            {
                SetValue(BindableChildProperty, value);
            }
        }

        // Using a DependencyProperty as the backing store for Max.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty BindableChildProperty =
            DependencyProperty.Register("BindableChild", typeof(Control), typeof(BindableWindowsFormsHost),  new FrameworkPropertyMetadata(new PropertyChangedCallback(OnBindableChildChanged)));

        /// <summary>
        /// Handles changes to the FlyoutWindowSize property.
        /// </summary>
        private static void OnBindableChildChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ((WindowsFormsHost)d).Child = e.NewValue as Control;
        }
    }

e.NewValue получает нужный мне элемент управления и устанавливает его правильно, НО я не вижу отражения изменений. Дочерний элемент установлен, но не может видеть windowsFormsHost с новым элементом управления.

У кого-нибудь есть идеи?

Спасибо и С уважением, Kev84


person Kev84    schedule 16.07.2012    source источник


Ответы (1)


Вместо создания оболочки вы можете обернуть WindowsFormsHost в ContentControl и установить его свойство Content через привязку. Таким образом вы избегаете проблемы, когда свойство WindowsFormsHosts Child не является свойством зависимости.

Что-то вроде этого в XAML:

<ContentControl Content="{Binding MyWindowsFormsHost}" />

..и это в вашем коде:

public WindowsFormsHost MyWindowsFormsHost
{   
    get { return new WindowsFormsHost(){Child=myWinformsControl}; }   
}
person Peter Hansen    schedule 16.07.2012
comment
но если я сделаю это таким образом, мне все равно придется установить дочерний код в коде. Затем вызовите изменение свойств для MyWindowsFormHost. я тоже видел это решение, но я не думаю, что оно работает так же хорошо, как решение-оболочка. Спасибо хоть - person Kev84; 16.07.2012
comment
Хорошо, я понял это, спасибо, да, видимо, я был на неправильном пути, но теперь я понял, спасибо. - person Kev84; 18.07.2012