Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Popup from code behind in WPF not working ( On resize and switching windows)

I want to add a popup on click of a Button in WPF. I dont want to add Popup code in my XAML. It has to be code behind.

My XAML is as follows::

<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>

My XAML file has a simple button. On click of Button, I am trying to execute the following code.

  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;

    }

But why is the popup not attaching itself to the window. I mean the popup is displayed even if I switch windows. Also when I resize window, Popup is no longer placed near button??

like image 940
Gurucharan Balakuntla Maheshku Avatar asked Nov 18 '10 05:11

Gurucharan Balakuntla Maheshku


2 Answers

you have to tell the popup to display itself, too.

codePopup.IsOpen = true;

see this blog for a bit more info.

[EDIT]
basically, your popup is not "tied" (or "owned") by any parent, it is independent of any other window and/or control (etc.) Unfortunatly, there is not any easy way to get around this.

You should probably download the Popup Position Sample from MSDN here.

The code sample uses the class CustomPopupPlacement with a Rect object, and binds to horizontal and vertical offsets to move the Popup.

like image 102
Muad'Dib Avatar answered Nov 15 '22 06:11

Muad'Dib


If you want popup should close automatically when you click outside of it then set codePopup.StaysOpen = false.So that it will close when you click outside of it.

like image 37
Mahesh Prakash Gurav Avatar answered Nov 15 '22 04:11

Mahesh Prakash Gurav