Abhilash.J.A Ответов: 1

WPF-usercontrol всплывающая проблема при нажатии на кнопку.


Всем привет,

У меня есть страница окна, после нажатия кнопки со страницы окна -> затем отображается страница UserControl. После того, как внутри UserControl появится всплывающее окно <Popup Name="MyPopup". Всплывающее окно всегда остается на вершине проблемы. Как я могу решить эту проблему ?

Спасибо,
Абхилаш.Дж.А

Что я уже пробовал:

Я пытался,

Сэр, это моя страница winodow ,

<Window x:Class="WpfApplication1.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="350" Width="525" Background="Green">
    <Grid >
        <Button Height="50" Width="100" Content="window_ClickMe" Click="btnUserManage_Click"></Button>
          <ContentControl Name="cont2" Visibility="Hidden">
          
        </ContentControl>
    </Grid>
    
</Window>


и код за страницей окна,

private void btnUserManage_Click(object sender, RoutedEventArgs e)
       {
           UC_UserMgmt mw = new UC_UserMgmt();
           cont2.Content = mw;
           cont2.Visibility = Visibility.Visible;
       }


тогда эта страница пользовательских элементов управления с popup,

<UserControl x:Class="WpfApplication1.UC_UserMgmt"

             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

             mc:Ignorable="d" 

             d:DesignHeight="300" d:DesignWidth="400" Background="Blue">
 
        <Grid>
        <Grid Name="g1">
            <Button Content="usercontrol_ClickMe" Height="50" Width="150" Margin="150,0,0,250" Click="btnShow_Click"></Button>
           
        </Grid>
               <Popup Name="MyPopup" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"

                              HorizontalOffset="-150" Placement="Mouse" StaysOpen="{Binding ElementName=g1,Path=IsMouseOver}"

               VerticalOffset="20"

               AllowsTransparency="True">
        <StackPanel>
            <Border BorderBrush="Black" Background="Brown" BorderThickness="1" Width="300" Height="100" >
                <Grid>
                    <TextBox x:Name="txtUName" HorizontalAlignment="Center" Height="28" Width="223" TextWrapping="Wrap" VerticalAlignment="Top" Margin="10,26,64.6,0" />
                    <Button Content="Open" Height="30" Width="50" Margin="238,24,9.6,43.6" Click="btnOpen_Click"/>
                </Grid>
            </Border>
        </StackPanel>
        </Popup>
    </Grid>
</UserControl>


и это код страницы пользовательских элементов управления,

private void btnOpen_Click(object sender, EventArgs e)
       {
            MyPopup.IsOpen = true;
            System.Windows.Forms.OpenFileDialog fDialog = new System.Windows.Forms.OpenFileDialog();
            fDialog.Title = "Select file to be zip";
            if (fDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtUName.Text = fDialog.FileName.ToString();
            }
       }

       private void btnShow_Click(object sender, EventArgs e)
       {
           MyPopup.IsOpen = true;
       }


Проблема в том, что когда пользователь нажимает на кнопку Открыть, открывается openFileDialog, а когда он открывается, всплывающее окно, кажется, исчезает. Как я могу решить эту проблему? Пожалуйста, помогите мне...

1 Ответов

Рейтинг:
8

Asgard25

Если вы посмотрите на свой код, то вполне логично, что он закроется, как только откроется диалоговое окно, потому что потеряет фокус.

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

1: измените код usercontrols так, чтобы он выглядел следующим образом, а остальное оставьте себе.

public UC_UserMgmt()
{
    InitializeComponent();
    MyPopup.StaysOpen = true;
}

Как вы увидите, это само по себе вызывает еще одну проблему.


2: Замените btnopen_click на этот
System.Windows.Forms.OpenFileDialog fDialog = new System.Windows.Forms.OpenFileDialog();
        fDialog.Title = "Select file to be zip";
        MyPopup.IsOpen = false;
        if (fDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            txtUName.Text = fDialog.FileName.ToString();
            MyPopup.IsOpen = true;
        }

Это было бы лучшим решением, но начальное расположение всплывающего окна отличается от второго IsOpen. Вы должны быть в состоянии исправить это.