【问题标题】:WPF Custom PopupWPF 自定义弹出窗口
【发布时间】:2014-08-14 22:12:15
【问题描述】:

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

在我的项目中,我需要获取全屏 WPF 应用程序的位图并将其发送出去。 为此,我在我的主画布上使用 RenderTargetBitmap。在我开始使用菜单和组合框之前,一切都很好。它们都使用 Popup 来显示子菜单项。所以从我读到的弹出窗口是作为一个单独的窗口实现的,它不是主窗口的子窗口。所以渲染位图不会得到它的位图。

所以我的解决方案是实现自定义弹出窗口并更改 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 作为弹出窗口。 当我逐步完成时,一切都很好,除了我在屏幕上看不到任何东西。 任何帮助将不胜感激。

【问题讨论】:

    标签: c# wpf popup contentcontrol


    【解决方案1】:

    您的问题远非独一无二...ToolTips 和 Popups 未出现在屏幕截图中这一事实已得到充分证明。正如您所建议的,一般的解决方案是简单地创建一个假装的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 属性添加另一个,以便您还可以控制它何时出现和消失。

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2011-05-08
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多