更改UserControl父级后,组合框下拉列表不显示

问题描述

我有一个WPF应用程序,该应用程序具有用户控件的集合,这些控件我“停靠”在名为MainWindow的窗口或名为PopOutwindow的辅助窗口中。

我在MainWindow上有一个按钮,该按钮创建PopOutwindow的新实例并将UserControl放入该窗口。然后,我在PopOutwindow上有另一个按钮,可将UserControl停靠在MainWindow中,然后自行关闭

我的怪异行为是,在一个特定控件上,我有一个带有下拉列表的ComboBox。每当我“弹出”该UserControl然后“停靠”它时,下拉列表都不会显示。组合框仍然可以使用键盘上的箭头键运行,但是我无法显示下拉部分。

它仅在“弹出”控件然后“停靠”它之后发生。我正在使用MahApps.Metro,这可能会影响这一点,但我不明白为什么。

是什么原因导致此组合框损坏?在这种情况下,我找不到其他似乎会损坏的控件。

MainWindow

private List<UserControl> _openedControls = new List<UserControl>();

private UserControl _currentControl;
public UserControl CurrentControl
{
    get { return _currentControl; }
    set
    {
        _currentControl = value;
        RaisePropertyChanged("CurrentControl");
    }
}

private string _currentTitle = "";
public string CurrentTitle
{
    get { return _currentTitle; }
    set
    {
        _currentTitle = value;
        RaisePropertyChanged("CurrentTitle");
    }
}

private ICommand _popOutCurrentControl;
public ICommand PopOutCurrentControl => _popOutCurrentControl ?? (_popOutCurrentControl = new RelayCommand(() =>
{
    _openedControls.RemoveAll(x => x.GetType() == CurrentControl.GetType());
    PopOutUserControl(CurrentControl,CurrentTitle);
    CurrentControl = _openedControls.Count > 0 ? _openedControls[_openedControls.Count - 1] : null;
    CurrentTitle = "";
},PopOutCurrentControl_CanExecute));

private void PopOutUserControl(UserControl control,string title)
{
    var win = (Window)Activator.CreateInstance(typeof(PopOutwindow),control,title);
    win.Show();
}

private void DockUserControlMessageReceived(DockUserControlMessage obj)
{
    _openedControls.Add(obj.Control);
    CurrentControl = obj.Control;
    CurrentTitle = obj.Title;
}

PopOutwindow

private void DockButton_Click(object sender,RoutedEventArgs e)
{
    DockUserControl((UserControl)ContentContainer.Content,Title);
}

private void DockUserControl(UserControl control,string title)
{
    Messenger.Default.Send(new DockUserControlMessage { Control = control,Title = title });

    var windows = Application.Current.Windows.Cast<Window>();
    var any = windows.Any(n => n.Title.Equals(title));

    if (any)
    {
        var win = windows.Where(n => n.Title.Equals(title)).ToList()[0];
        win.Close();
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)