创建了可绑定的WindowsFormsHost,但子更新未反映到控件中

时间:2012-07-16 18:10:47

标签: .net wpf binding 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

1 个答案:

答案 0 :(得分:8)

您可以将WindowsFormsHost包装在ContentControl中,并通过绑定设置其Content属性,而不是创建包装器。这样就可以避免WindowsFormsHosts子属性不是依赖属性的问题。

XAML中有这样的事情:

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

..并且这在您的代码隐藏中:

public WindowsFormsHost MyWindowsFormsHost
{   
    get { return new WindowsFormsHost(){Child=myWinformsControl}; }   
}