繁体   English   中英

WPF自定义弹出窗口

[英]WPF Custom Popup

我对WPF弹出窗口有一个独特的问题。

在我的项目中,我需要获取全屏WPF应用程序的位图并将其发送出去。 为此,我在主画布上使用了RenderTargetBitmap。 在我开始使用Menu&Combobox之前,一切都很好。 它们都使用Popup来显示子菜单项。 因此,根据我的阅读,弹出窗口被实现为一个单独的Window,它不是MainWindow的子级。 因此,渲染位图将无法获取其位图。

因此,我的解决方案是实现自定义弹出窗口并更改MenuItem的控件模板。

在我的自定义弹出窗口IsOpenChanged事件中,我这样做

        private void PopupPanel_IsOpenChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if ((bool)e.NewValue)
            {
                ContentControl childControl = new ContentControl();
                childControl.Content = this.Content;

                Canvas rootCanvas = FindAncester<Canvas>(this);
                rootCanvas.Children.Add(childControl);

                childControl.Focus();

                Child = childControl;
            }
            else
            {
                if (Child != null)
                {
                    Canvas rootCanvas = FindAncester<Canvas>(this);
                    rootCanvas.Children.Remove(Child);

                    Child = null;
                 }
            }
        }

想法是在主画布上方显示一个子ContentControl作为弹出窗口。 当我逐步浏览时,一切正常,但我看不到屏幕上的任何内容。 任何帮助,将不胜感激。

您的问题远非唯一的问题... ToolTipPopup不在屏幕截图中的事实已得到充分证明。 如您所建议,一般的解决方案是简单地创建一个假装的Popup控件。 现在,我无法告诉您示例的问题,但是我可以简单地为您提供一些XAML,以显示伪装的Popup控件。 尝试这个:

<Grid>
    <!-- Declare normal view content here -->
    <Border CornerRadius="5" Background="White" BorderBrush="LightGray" 
        BorderThickness="1" Width="200" Height="100" Panel.ZIndex="10">
        <Border.Effect>
            <DropShadowEffect BlurRadius="10" Direction="270" ShadowDepth="7" 
                Opacity="0.5" />
        </Border.Effect>
        <TextBlock Text="I'm a fake Popup control" HorizontalAlignment="Center" 
            VerticalAlignment="Center" />
    </Border>
</Grid>

在此处输入图片说明

为了使它更有用,我将为TextBlock.Text属性添加一个Binding ,为Visibility属性添加另一个,以便您还可以控制它的显示和消失时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM