Silverlight - 将弹出窗口置于前台

3

我有4个弹出窗口,定义如下:

        <Popup x:Name="MyPopup1" IsOpen="True" Margin="0,10,0,0" Grid.Row="0" >
            <Popup.Child>
                <Thumb x:Name="thumb1" DragDelta="Thumb_DragDelta" Width="0" Height="0" Template="{StaticResource thumbDisplay}" />
            </Popup.Child>
        </Popup>
        <Popup x:Name="MyPopup2" IsOpen="True" Margin="0,20,0,0" Grid.Row="0" >
            <Popup.Child>
                <Thumb x:Name="thumb2" DragDelta="Thumb_DragDelta" Width="0" Height="0" Template="{StaticResource thumbDisplay}" />
            </Popup.Child>
        </Popup>

拇指的模板只是一个用户控件。由于弹出窗口已经打开,当我需要向用户显示它们时,我会将包含的拇指动画放大。
问题是,当用户单击拇指以拖动它时,我真的希望能够将其置于前面,使其成为最顶层的控件 - 就像常规弹出窗口一样工作。
我已经实现了leftMouseDown事件(在Thumb的用户控件模板中),并尝试了以下两种方法(第二种方法是为了查看是否有任何效果)。
        Canvas.SetZIndex(this, 9999);

        Canvas.SetZIndex(VisualTreeHelper.GetOpenPopups().ElementAt(1), 9999);

我也尝试将Z-Index设置为0,试图将弹出窗口推到底部,只是为了看看是否有用。但是一点作用都没有。
我还尝试了这里的方法,但也没有用,虽然我怀疑这与我无关,因为我没有ContentPresenter元素。
参考链接:Bring element forward (Z Index) in Silverlight/WPF
1个回答

2

如果有人搜索这个问题,看起来你可以通过重置弹出窗口的IsOpen属性将其置于前台。所以只需找出与你点击的控件相关联的弹出窗口,然后调用此方法,弹出窗口就会再次置于顶部。

    private void FlashPopup(Popup popup) {
        popup.IsOpen = false;
        popup.IsOpen = true;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接