Как использовать Popup, определенный в ресурсах App.xaml? - PullRequest
3 голосов
/ 13 мая 2011

У меня есть всплывающее окно, определенное внутри ресурсов App.xaml:

<Application.Resources>
        <Popup x:Key="popup">
            //some content here
        </Popup>
   </Application.Resources>

Я хочу использовать это следующим образом:

                    Popup popup = this.Resources["popup"] as Popup;
                    popup.IsOpen = true;

Почему всплывающее окно не отображается? Любая помощь высоко ценится.

1 Ответ

5 голосов
/ 13 мая 2011

Ваша проблема в том, что когда вы определяете PopUp и его содержимое внутри App.xaml Resources, вы назначаете его визуальному дереву, отличному от того, которое отображается на вашей странице. Установка свойства IsOpen для истинных произведений недостаточна для того, чтобы фактически сделать его видимым, необходимо добавить 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;

Помните, что таким образом у вас больше не будет ссылки в словаре ресурсов вашего приложения, и если вы попытаетесь выполнить последующий вызов этого метода, произойдет сбой из-за исключения NullReferenceException. Опять же, немного кода, вы можете исправить это и добавить всплывающее окно обратно к ресурсам, когда вы закрываете его:

popup.IsOpen = false; // локальная ссылка на ваше всплывающее окно, сохраненное ранее ContentPanel.Children.Remove (всплывающее окно); // удалить из текущего визуального дерева App.Current.Resources.Add ("popup", popup); // добавить его обратно к ресурсам

Несмотря на то, что этот код работает, и вы можете правильно отобразить всплывающее окно, я думаю, что это немного излишне только для PopUp, который вы можете определить на своей странице и просто сделать его видимым, изменив свойство IsOpen.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...