我試圖設計,這將出現在其PlacementTarget
彈出出現在其父的右下角
的右下角我們承認你設置其PlacementTarget
爲Window
一個彈出,那麼,Popup將作爲經典的烤麪包機通知。
鑑於WPF不夠智能爲我們提供一個「角落」解決方案,我試圖實現一個新的控件,它繼承自Popup
,它將自己置於適當的位置。
這是我的第一個想法:在Loaded
事件上工作,以確定我應該在哪裏放置Popup。 問題?我不想給彈出窗口設定任何固定的尺寸,根據顯示的文字,彈出窗口的尺寸應該是自己的。
但是,當Loaded
事件引發時,我無法獲得ActualWidth
屬性。 我無法在Opened
事件發生時收到。
這是迄今爲止守則草案:
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);
}
}
有沒有我可以用它來趕上我想在這裏的任何其他事件? 我基本上喜歡將HorizontalOffset
設置爲parentWidth - ActualWidth/2
,高度相同:) 任何想法?
謝謝!
你可以給2張圖片,一個與目前的行爲和一個與所需的行爲嗎? – 2011-12-23 16:41:35
通常,我將'PlacementTarget'設置爲'Bottom'或'Right',然後應用一個'LayoutTransform',將Popup移動剩餘的值。例如,我可以使用'Placement = Bottom',然後使用LayoutTransform將彈出窗口'(Window.Width - Popup.Width)'向右移動,並且'Popup.Height'向上移動。您可能甚至不需要根據彈出高度/寬度重新調整,因爲MSDN表示彈出窗口不允許在屏幕外顯示,並且會自動調整其位置以使其可見。 – Rachel 2011-12-23 17:26:17
@Rachel不幸的是我不能那樣做。正如我前面所說的,我不想給我的'Popup'固定大小,所以在最好的情況下,'Height'和'Width'應該是'NaN'。然而,由於在OnOpened方法中,我不能在'ActualHeight'和'ActualWidth'上工作,它們仍然等於0.我不相信我只是在底部彈出一個彈出窗口,其父母的權利-__- – Damascus 2011-12-26 10:19:25