【问题标题】:Silverlight - Bring Popup to FrontSilverlight - 将弹出窗口置于最前面
【发布时间】:2010-11-10 23:44:38
【问题描述】:

我有 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 的用户控件模板中),并尝试了以下两种方法(第二个,看看是否有任何工作)

        Canvas.SetZIndex(this, 9999);

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

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

我也尝试过这里的内容,但也无济于事,尽管我怀疑这不适用于我,因为我没有 ContentPResenter

Bring element forward (Z Index) in Silverlight/WPF

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    如果有人搜索此内容,您似乎可以通过重置其 IsOpen 属性将弹出窗口置于最前面。所以只要弄清楚你点击的控件属于哪个弹出窗口,然后调用它,弹出窗口就会再次出现在顶部。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 2017-05-17
      • 1970-01-01
      相关资源
      最近更新 更多