我在App.xaml资源中定义了一个弹出窗口:
<Application.Resources>
<Popup x:Key="popup">
//some content here
</Popup>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
我想以这种方式使用它:
Popup popup = this.Resources["popup"] as Popup;
popup.IsOpen = true;
Run Code Online (Sandbox Code Playgroud)
出于某种原因,弹出窗口没有显示?任何帮助都非常感谢.
您的问题是,当您PopUp在App.xaml中定义及其内容时Resources,您将其分配给与页面上显示的树不同的可视树.将IsOpen属性设置为true works不足以实际使其可见,您必须将其添加PopUp到当前可视树.这是你的第二个问题,因为PopUp已经有了Parent,你不能直接将它添加到你的页面,因为你会得到一个InvalidOperationException.
这是一个可能的解决方案:
popup = App.Current.Resources["popup"] as Popup;
App.Current.Resources.Remove("popup"); // remove the PopUp from the Resource and thus clear his Parent property
ContentPanel.Children.Add(popup); // add the PopUp to a container inside your page visual tree
popup.IsOpen = true;
Run Code Online (Sandbox Code Playgroud)
请注意,这样您不再在App的Resource字典中引用它,如果您尝试后续调用此方法,它将因NullReferenceException而失败.再次,通过一些代码,您可以解决此问题,并在关闭它时将PopUp添加回资源:
popup.IsOpen = false; //在ContentPanel.Children.Remove(popup)之前存储的PopUp的本地引用; //从当前可视树中删除App.Current.Resources.Add("popup",popup); //将它添加回资源
虽然这段代码可以正常工作,你可以正确显示你的PopUp,但我觉得这有点过分,只是PopUp你可以在你的页面内部实际定义,只需通过更改IsOpen属性使其可见即可.
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |