C# 如何避免在xaml中定义时创建多个弹出窗口?

C# 如何避免在xaml中定义时创建多个弹出窗口?,c#,silverlight,xaml,windows-phone-7,popup,C#,Silverlight,Xaml,Windows Phone 7,Popup,我想在事件页面上显示一个弹出窗口。我在页面定义中添加了一个弹出窗口。这是第一次很好用。但由于弹出窗口不是可视化树的一部分,所以下次访问页面时会再次创建弹出窗口。我怎样才能避免这种情况?我知道的唯一选择是在代码隐藏中编写一个静态弹出窗口。但是有什么方法可以在xaml中实现这一点吗?(或可能在VM中) 这是我在XAML中的代码 <Popup Grid.Row="2" x:Name="popup" IsOpen="{Binding VenueListOpen}">

我想在事件页面上显示一个弹出窗口。我在页面定义中添加了一个弹出窗口。这是第一次很好用。但由于弹出窗口不是可视化树的一部分,所以下次访问页面时会再次创建弹出窗口。我怎样才能避免这种情况?我知道的唯一选择是在代码隐藏中编写一个静态弹出窗口。但是有什么方法可以在xaml中实现这一点吗?(或可能在VM中)

这是我在XAML中的代码

<Popup Grid.Row="2" x:Name="popup" IsOpen="{Binding VenueListOpen}">
                <ScrollViewer Height="600" Margin="0,0,0,20" Background="#55000000">
                    <StackPanel Width="{Binding DeviceWidth}">
                        <ItemsControl ItemsSource="{Binding EventsList}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Margin="20,0" Background="{Binding BindsDirectlyToSource=True, Converter={StaticResource EventRowBackgroundConverter}}">                                      
                                        <TextBlock Margin="20,5" FontSize="30" Text="Metlife stadium" TextWrapping="Wrap"/>
                                        <TextBlock Margin="20,5" Foreground="SkyBlue" Text="www.metlifestadium.com" TextWrapping="Wrap"/>                                        
                                    </StackPanel>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </StackPanel>
                </ScrollViewer>
            </Popup>


当您进入页面时,如何将其
Visible
属性设置为false或true?

我找到了解决方法。也许有更好的解决方案,但这对我来说很有效:


在代码隐藏中,通过将绑定设置为
null
来分离绑定。因此,无论何时移动,当前的
弹出窗口将成为孤立窗口,当您再次访问该页面时,导航将创建新页面以及新弹出窗口。但这一次只会出现新的弹出窗口,因为旧的弹出窗口未绑定到
datacontext
,因此
IsOpen
的绑定不会影响该弹出窗口的任何旧实例。

但由于绑定适用于弹出窗口的每个实例,因此每个实例将同时打开/关闭。最糟糕的是,实例没有重叠,它们出现在不同的位置。所以如果我理解正确,你有多个弹出窗口的实例吗?这没有什么意义,因为你只声明了一次。也许您可以为代码提供更多的上下文?您的弹出窗口是哪个控件/表单的子控件?您的弹出窗口在xaml标记中的确切位置?你试过把它移到Window.Resources吗?@VladimirFrolov这是page的根控件。我不知道如何使用控件作为资源。什么是窗口资源?是Page.Resource吗?我也有同样的问题,但这听起来不对。。。最终,我们会看到大量的孤立弹出窗口占用内存?当然可以?@Jimmyt1988一旦任何UI控件关闭,只要没有绑定到该UI控件的引用,它就会被垃圾收集。(请确保在离开时取消挂接任何委托、事件处理程序。)