Я хотел бы автоматически закрыть всплывающее окно, управляя значением StaysOpen, которое является свойством всплывающего окна. Я открывал его всякий раз, когда вводился текст или нажималась левая кнопка мыши.
StaysOpen установлено на false .
<Grid>
<TextBox x:Name="textBox" PreviewMouseLeftButtonUp="textBox_PreviewMouseLeftButtonUp"/>
<Popup IsOpen="{Binding IsOpen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" OpacityMask="Transparent" StaysOpen="{Binding StaysOpen, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
AllowsTransparency="True" PlacementTarget="{Binding ElementName=textBox}">
<Border CornerRadius="5" Background="#FF303030" Width="{Binding ActualWidth, ElementName=textBox}">
...
</Border>
</Popup>
</Grid>
private void textBox_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if ((sender as TextBox).Text.Length > 0)
{
IsOpen = !IsOpen;
}
}
Когда текст вводится в текстовое поле с параметром IsOpen всплывающего окна, равным true, можно автоматически закрыть всплывающее окно при щелчке за пределами элемента управления. Но в состоянии вызова функции textBox_PreviewMouseLeftButtonUp с такими же ситуациями она не будет закрыта автоматически (также IsOpen истинно)
Если я перейду на e.handel = true в textBox_PreviewMouseLeftButtonUp, то может быть закрыт автоматически , щелкнув за его пределами. Но у него есть серьезная проблема, он не может выбрать какой-либо элемент управления во всплывающем окне. так что нельзя использовать этот способ.
Как безопасно закрыть всплывающее окно автоматически, щелкнув за пределами элемента управления?