Я использую Caliburn.Micro для приложения WPF.ListBox и Popup не работают вместе
Одна из возможностей, которую я использую, обертывает представление в элементе управления всплывающим окном и позволяет мне выбирать настройки.
Но я пришел к выводу, что это поведение я не могу решить.
В появившемся коде, когда я нажимаю кнопку, появляется всплывающее окно, и когда я нажимаю в другом месте на экране, он уходит, как ожидалось.
Когда я нажимаю на элемент в списке, всплывающее окно появляется, но не исчезает, если я нажимаю в другом месте окна. (он делает, хотя если я нажму где-нибудь еще, как другое приложение)
В принципе, я не могу создать PopUp с StaysOpen = false при обработке события выбранного элемента. Что я могу сделать, чтобы решить эту проблему?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox Name="ListBox" Width="250" HorizontalAlignment="Left" SelectionChanged="ListBox_SelectionChanged">
</ListBox>
<Button Name="Button" HorizontalAlignment="Right" Content="ShowPopUp" Click="Button_Click" />
</Grid>
</Window>
и код за
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.ListBox.ItemsSource = new System.Collections.ObjectModel.ObservableCollection<MainWindowItem>()
{
new MainWindowItem {Name = "Test 001" },
new MainWindowItem {Name = "Test 002" },
new MainWindowItem {Name = "Test 003" },
};
}
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selection = this.ListBox.SelectedItem as MainWindowItem;
if (selection == null)
{
return;
}
var popUp = new System.Windows.Controls.Primitives.Popup();
popUp.Child = new TextBox { Text = selection.Name , MinWidth = 200 , MinHeight = 32};
popUp.StaysOpen = false;
popUp.AllowsTransparency = true;
popUp.PlacementTarget = sender as FrameworkElement;
popUp.IsOpen = true;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var popUp = new System.Windows.Controls.Primitives.Popup();
popUp.Child = new TextBox { Text = "This is button Clicked" , MinWidth = 200, MinHeight = 32 };
popUp.StaysOpen = false;
popUp.AllowsTransparency = true;
popUp.PlacementTarget = sender as FrameworkElement;
popUp.IsOpen = true;
}
}
public class MainWindowItem
{
public string Name { get; set; }
public string Value { get; set; }
}
}
Спасибо, я дам вам знать, если это сработает для меня, как только я смогу – mhttk
это кажется прекрасным, но я закончил использовать несколько иной подход, так как у меня может быть несколько всплывающих окон одновременно. – mhttk
@mhttk может ypu, пожалуйста, перефразировать? – Ilan