问题描述
我有一个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 (将#修改为@)