Всплывающее окно из-за кода в WPF не работает (при изменении размера и переключении окон) - PullRequest
8 голосов
/ 18 ноября 2010

Я хочу добавить всплывающее окно при нажатии кнопки в WPF.Я не хочу добавлять всплывающий код в мой XAML.Это должен быть код.

Мой XAML выглядит следующим образом: *

<Window x:Class="Test.Window1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="Window1" Height="300" Width="300">
   <Grid>
     <Button x:Name="button1" Click="button1_Click">Button</Button>
   </Grid>
</Window>

В моем файле XAML есть простая кнопка.При нажатии кнопки я пытаюсь выполнить следующий код.

  private void button1_Click(object sender, RoutedEventArgs e)
    {
        Button button = sender as Button;

        Popup codePopup = new Popup();
        TextBlock popupText = new TextBlock();
        popupText.Text = "Popup Text";
        popupText.Background = Brushes.LightBlue;
        popupText.Foreground = Brushes.Blue;
        codePopup.Child = popupText;

        codePopup.PlacementTarget = button;
        codePopup.IsOpen = true;

    }

Но почему всплывающее окно не прикрепляется к окну .Я имею в виду всплывающее окно отображается, даже если я переключаю окна.Также, когда я изменяю размер окна , всплывающее окно больше не помещается рядом с кнопкой ??

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

Вы должны указать всплывающему окну также отображать себя.

codePopup.IsOpen = true;

см. этот блог для получения дополнительной информации.

[EDIT]по сути, ваше всплывающее окно не «привязано» (или «не принадлежит») любому родителю, оно не зависит от любого другого окна и / или элемента управления (и т. д.) К сожалению, не существует простого способа обойти это.

Вероятно, вам следует загрузить образец позиции всплывающего окна из MSDN здесь .

В примере кода используется класс CustomPopupPlacement с объектом Rect, и он привязывается к горизонтальным и вертикальным смещениям для перемещения всплывающего окна..

2 голосов
/ 09 декабря 2013

Если вы хотите, чтобы всплывающее окно закрывалось автоматически, когда вы нажимаете за его пределами, установите codePopup.StaysOpen = false.Так что он закроется, когда вы щелкнете за его пределами.

...