我有一个窗口页面,点击窗口页面的按钮后 - &gt;然后显示一个UserControl页面。在Inside UserControl之后,有一个<Popup Name="MyPopup">
弹出窗口。 Popup始终处于最重要的问题。我该如何解决这个问题?
我试过了,
<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>
&#13;
和窗口页面后面的代码,
private void btnUserManage_Click(object sender, RoutedEventArgs e)
{
UC_UserMgmt mw = new UC_UserMgmt();
cont2.Content = mw;
cont2.Visibility = Visibility.Visible;
}
然后,这是带有弹出窗口的用户控制页面,
<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>
&#13;
这是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;
}
问题是,当用户点击OPEN按钮时,openFileDialog正在打开,当它打开时,弹出窗口似乎消失了。我该如何解决这个问题?
答案 0 :(得分:1)
我相信在您的情况下使用Popup不是正确的选择。看看Popup.StaysOpen Property,特别是
部分当StaysOpen属性设置为true时,Popup将保持打开状态,直到通过将IsOpen属性设置为false来显式关闭它。当StaysOpen为false时,Popup控件拦截所有鼠标和键盘事件,以确定其中一个事件何时发生在Popup控件之外。
我无法想到在显示对话框时保持弹出窗口打开的简洁方法,因为对话框将在您与其交互时创建鼠标/键盘事件
但是要回答你的问题,我可以想到两个选择
1)您只需将MyPopup.IsOpen = true;
中的btnOpen_Click
移至代码块的末尾即可。我认为这会导致弹出窗口在关闭对话框后重新打开
2)您可以在代码中创建布尔属性或依赖属性,然后在显示弹出窗口并将Popup的 StaysOpen 绑定到它时将其设置为true,并在 LostFocus 用于 g1 或类似的东西。或者甚至将 StaysOpen 设置为 true 并使用 IsOpen 关闭 g1 的 LostFocus <中的Popup /强>
编辑 - 第二个解决方案操作方法 不要使用它,脏代码,不良做法,弹出窗口仍在对话框顶部
在弹出集StaysOpen="True"
中
在UserControl中的每个控件中,除了UserControl本身和文本框集Focusable="False"
将private bool dont;
添加到UserControl的代码隐藏中,并在btnOpen_Click
的开头将其设置为 True ,并将其设置为 False />
在UserControl和TextBox中添加LostFocus="UserControl_LostFocus"
然后在UserControl代码隐藏
private void UserControl_LostFocus(object sender, RoutedEventArgs e)
{
if(!dont && !txtUName.IsFocused && !IsFocused)
MyPopup.IsOpen = false;
}