WPF自定义弹出窗口

时间:2014-08-14 22:12:15

标签: c# wpf popup contentcontrol

我对WPF Popups有一个独特的问题。

在我的项目中,我需要获取全屏WPF应用程序的位图并将其发送出去。 为此,我在主画布上使用RenderTargetBitmap。一切都很好,直到我开始使用Menu&组合框。它们都使用Popup来显示子菜单项。因此,从我读到的内容看,Popups是作为一个单独的Window实现的,它不是MainWindow的子代。因此渲染位图不会获得它的位图。

所以我的解决方案是实现自定义弹出窗口并更改MenuItem的controltemplate。

在我的自定义弹出窗口中,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作为弹出窗口。 当我逐步完成一切都很顺利,除了我在屏幕上看不到任何东西。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您的问题远非独特...... 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>

enter image description here

为了使这更有用,我会为Binding属性添加TextBlock.Text,为Visibility属性添加另一个属性,这样您也可以控制它何时出现并消失。