Вы также можете привязать свойство StaysOpen к кнопке переключения:
StaysOpen="{Binding ElementName=toggleButton,Path=IsMouseOver}"
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-binding-helpful-tip?forum=wpf
Проблема для меня заключалась в том, что если я дважды щелкнул по своей сетке данных, которая находится во всплывающем окне, всплывающее окно открылось напрямую, поэтому я использовал мультисвязь
Что я сделал:
Я несколько привязал свойство StayOpen к IsMouseOver toggleButton и к моей сетке данных IsMouseOver, которая находится во всплывающем окне.
<Popup.StaysOpen>
<MultiBinding Converter="{StaticResource MultiBinding_StayOpen}">
<Binding ElementName="toggleButton" Path="IsMouseOver"/>
<Binding ElementName="dtg_loc" Path="IsMouseOver" />
</MultiBinding>
</Popup.StaysOpen>
MultiBindingConverter:
public class MultiBinding_StayOpen : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool toggleIsMouseOver;
bool datagridIsMouseOver;
toggleIsMouseOver = System.Convert.ToBoolean(values[0]);
datagridIsMouseOver = System.Convert.ToBoolean(values[1]);
if (toggleIsMouseOver == false && datagridIsMouseOver == false)
return false;
if (toggleIsMouseOver == true && datagridIsMouseOver == false)
return true;
if (toggleIsMouseOver == true && datagridIsMouseOver == true)
return false;
return true;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Надеюсь, это поможет :-)