Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 弹出窗口显示在其父对象的右下角_Wpf_Popup_Dimensions - Fatal编程技术网

Wpf 弹出窗口显示在其父对象的右下角

Wpf 弹出窗口显示在其父对象的右下角,wpf,popup,dimensions,Wpf,Popup,Dimensions,我正在尝试设计一个弹出窗口,它将出现在其PlacementTarget 我们承认,您将其PlacementTarget设置为窗口,弹出窗口将充当经典的烤面包机通知 鉴于WPF不够智能,无法为我们提供“角落”解决方案,我正在尝试实现一个新控件,继承自弹出窗口,它将自身放置在适当的位置 这是我的第一个想法:处理Loaded事件以确定应该将弹出窗口放置在何处。 问题我不想给弹出窗口提供任何固定的尺寸,它应该根据显示的文本来调整大小 但是,当引发load事件时,我无法获取ActualWidth属性。 当

我正在尝试设计一个弹出窗口,它将出现在其
PlacementTarget

我们承认,您将其
PlacementTarget
设置为
窗口
,弹出窗口将充当经典的烤面包机通知

鉴于WPF不够智能,无法为我们提供“角落”解决方案,我正在尝试实现一个新控件,继承自
弹出窗口
,它将自身放置在适当的位置

这是我的第一个想法:处理
Loaded
事件以确定应该将弹出窗口放置在何处。 问题我不想给弹出窗口提供任何固定的尺寸,它应该根据显示的文本来调整大小

但是,当引发
load
事件时,我无法获取
ActualWidth
属性。 当引发
打开
事件时,我也不能使用它

以下是迄今为止的准则草案:

public class ExceptionPopup : Popup
{
       public ExceptionPopup()
        {
            InitializeComponent();
            Loaded += new RoutedEventHandler(ExceptionPopup_Loaded);
        }

        void ExceptionPopup_Loaded(object sender, RoutedEventArgs e)
        {
            if (PlacementTarget != null)
            {
                if (PlacementTarget is FrameworkElement)
                {
                    parentWidth = (PlacementTarget as FrameworkElement).ActualWidth;
                    parentHeight = (PlacementTarget as FrameworkElement).ActualHeight;
                }
            }
        }

        protected override void OnOpened(EventArgs e)
        {
            this.HorizontalOffset = parentWidth;
            this.VerticalOffset = parentHeight;
            base.OnOpened(e);
        }
}
有没有其他活动可以让我抓住我想要的? 我基本上希望将
水平偏移设置为
parentWidth-ActualWidth/2
,高度相同:) 有什么想法吗


谢谢

通常我将
PlacementTarget
设置为
Bottom
Right
,然后应用
RenderTransform
,将
弹出框
移动剩余值

例如,我可以使用
Placement=Bottom
,然后使用
RenderTransform
将弹出窗口
(Window.Width-popup.Width)
向右移动,并向上移动
popup.Height
。您甚至可能不需要根据弹出窗口的高度/宽度进行重新调整,因为MSDN表示不允许在屏幕外显示弹出窗口,并且它将自动调整弹出窗口的位置以保持其可见


请确保使用
RenderTransform
而不是
LayoutTransform
,因为呈现弹出窗口后会应用
RenderTransforms
,因此
ActualHeight
ActualWidth
将大于0。

您能给出两张图片吗,一个具有当前行为,另一个具有所需行为?通常我将
PlacementTarget
设置为
Bottom
Right
,然后应用
layoututtransform
,将弹出窗口移动剩余值。例如,我可以使用
Placement=Bottom
,然后使用LayoutTransform将弹出窗口
(Window.Width-popup.Width)
向右移动,并将
popup.Height
向上移动。您甚至可能不需要根据弹出窗口的高度/宽度进行重新调整,因为MSDN说不允许在屏幕外显示弹出窗口,它会自动调整弹出窗口的位置以使其可见。@Rachel遗憾的是,我不能这样做。正如我前面所说的,我不想给我的
弹出窗口指定一个固定的大小,所以在最好的情况下,
高度和
宽度应该是
NaN
。但是,我无法处理
ActualHeight
ActualWidth
,因为在
OnOpened
方法中,它们仍然等于0。我真不敢相信我在将弹出窗口放在其父对象的右下角时遇到了麻烦-uu-@Damascus尝试
RenderTransform
而不是
LayoutTransform
。它将在弹出窗口渲染后应用,因此
ActualHeight
ActualWidth
将大于0Nice idea@Rachel,它可以工作!谢谢,我以前从未使用过
RenderTransform
,刚刚学会,再次感谢!