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
,刚刚学会,再次感谢!