【问题标题】:Windows Forms control wrapping in WPF doesn't work properlyWPF 中的 Windows 窗体控件包装无法正常工作
【发布时间】:2012-04-28 14:31:39
【问题描述】:

我需要包装 Windows 窗体 DateTimePicker 以在我的 WPF 3.5 应用程序中使用它。我已经控制了它:

<UserControl><WindowsFormsHost>
<wf:DateTimePicker x:Name="picker" ValueChanged="DateTimePicker_ValueChanged"/>
</WindowsFormsHost></UserControl>

这是支持代码:

    bool suppressUpdates;

    public DatePicker()
    {
        InitializeComponent();
    }

    private void DateTimePicker_ValueChanged(object sender, EventArgs e)
    {
        if(!suppressUpdates)
            SetValue(SelectedDateProperty, picker.Value);
    }

    public DateTime SelectedDate
    {
        get {return (DateTime)GetValue(SelectedDateProperty); }
        set
        {
            suppressUpdates = true;
            picker.Value = value;
            SetValue(SelectedDateProperty, value);
            suppressUpdates = false;
        }
    }

    public static readonly DependencyProperty SelectedDateProperty =
    DependencyProperty.Register("SelectedDate", typeof(DateTime),
   typeof(DatePicker), new UIPropertyMetadata(DateTime.Now));

然后我在 WPF 窗口中使用它:

<mui:DatePicker Width="300" SelectedDate="{Binding
Path=TheDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

它绑定到INotifyPropertyChanged-启用的视图模型。所有其他控件都很好地绑定到它,但我的 DateTimePicker 没有获得视图模型中指定的日期值。但是,它将其值更改传播回给它。

我做错了什么?

【问题讨论】:

    标签: wpf winforms data-binding datepicker


    【解决方案1】:

    好的,很简单。

        private void DateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            SetValue(SelectedDateProperty, picker.Value);
        }
    
        public DateTime SelectedDate
        {
            get { return (DateTime)GetValue(SelectedDateProperty); }
            set { SetValue(SelectedDateProperty, value); }
        }
    
        public static readonly DependencyProperty SelectedDateProperty =
            DependencyProperty.Register("SelectedDate", typeof(DateTime), typeof(DatePicker), new UIPropertyMetadata(DateTime.Now, textChangedCallback));
    
        private static void textChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            DatePicker input = (DatePicker)d;
            input.picker.Value = (DateTime)e.NewValue;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多