Silverlight - 将Popup带到前面

时间:2010-11-10 14:53:03

标签: silverlight

我有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>

Thumb的模板只是一个用户控件。由于弹出窗口已经打开,因此当我需要向用户显示时,我会对包含的拇指进行动画处理。

问题是,当用户点击拇指将其拖动时,我真的希望能够把它拉到前面,所以它是最顶级的控件 - 就像普通的弹出窗口一样。

我已经实现了leftMouseDown事件(在Thumb的usercontrol模板中),并尝试了以下两种方法(第二个用于查看ANYTHING是否有效)

        Canvas.SetZIndex(this, 9999);

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

(我也尝试将Z-Index设置为0 - 尝试将弹出窗口推到底部,再次,看看是否有任何效果)至少没有任何效果。

我也试过这里的东西,也无济于事,但我怀疑这不适用于我,因为我没有ContentPResenter

Bring element forward (Z Index) in Silverlight/WPF

1 个答案:

答案 0 :(得分:2)

再次如果有人搜索到这个,看起来你可以通过重置其IsOpen属性将弹出窗口带到前面。所以只要找出你点击的控件属于哪个弹出窗口,然后只需调用它,弹出窗口将再次显示在上面。

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