我是WPF的新手,并尝试构建我的第一个应用程序,它是多个流的多视图,用于学习目的 .
我在主窗口上有24个多媒体元素,我想要全屏选择的多媒体元素,当有一个点击以最小化这个完整的屏幕媒体 .
代码是这样的
foreach (var item in MediaElements)
{
item.LoadedBehavior = MediaState.Manual;
item.MouseEnter += mediaElement1_MouseEnter;
item.MouseLeave += mediaElement1_MouseLeave;
item.Loaded += mediaElement1_Loaded;
item.MouseLeftButtonUp += (o, args) =>
{
if(!fullscreen)
{
ListOfMedia.Children.Remove(item);
this.Content = item;
this.WindowStyle = WindowStyle.None;
this.WindowState = WindowState.Maximized;
}
else
{
this.Content = ListOfMedia;
ListOfMedia.Children.Add(item);
this.WindowStyle = WindowStyle.SingleBorderWindow;
this.WindowState = WindowState.Normal;
}
fullscreen = !fullscreen;
};
当我第一次点击它时,它工作得非常好,窗口正在进行最大屏幕尺寸,但是当我下次点击它以最小化它时,有一个例外,它对我说
System.ArgumentException: 'Must disconnect specified child from current parent Visual before attaching to new parent Visual.'
我检查了一些StackOverflow问题,但找不到正确的解决方案,有人在谈论从父树中删除子项的扩展方法,我写了这个扩展方法,但我不知道是什么问题,这个问题背后有什么想法?我必须删除的内容和发生的事情 .
请告诉我这里发生了什么 .
1 回答
整个想法是,如果一个元素已经有一个逻辑父元素,那么你不能将它作为另一个元素子元素 .
想象一下以下设置:
以上将导致
System.InvalidOperationException:'Specified element is already the logical child of another elelemt. Disconnect it first.'
在通过以下代码将该元素添加到
StackPanel
之前,您可以轻松地孤立该元素:异常将消失!