Я пытаюсь создать всплывающее окно, которое появится в правом нижнем углу его PlacementTarget
Допустим, вы установили для PlacementTarget
значение Window
, ну и всплывающее окно будет действовать как классические уведомления тостера.
Учитывая тот факт, что WPF недостаточно умен, чтобы предоставить нам «угловое» решение, я пытаюсь реализовать новый элемент управления, наследующий от Popup
, который будет располагаться в соответствующем месте.
Вот моя первая идея: поработать над событием Loaded
, чтобы определить, где я должен разместить всплывающее окно.
Проблема? Я не хочу задавать всплывающие размеры фиксированного размера, размер которого должен соответствовать самому отображаемому тексту.
Однако я не могу получить свойство ActualWidth
при возникновении события Loaded
.
Я также не могу получить его, когда событие 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
, то же самое для высоты :)
Есть идеи?
Спасибо!