Drugi dzień walki z tym problemem.Niewidoczne otwarte okienko wyskakujące
Aby odtworzyć, należy utworzyć nową aplikację WPF XAML
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<Button Width="100" Height="100" MouseMove="Button_MouseMove"/>
<Popup x:Name="popup" StaysOpen="False" AllowsTransparency="True" Placement="Center">
<TextBlock>Some random text</TextBlock>
</Popup>
<CheckBox IsChecked="{Binding (Popup.IsOpen), ElementName=popup}">Popup</CheckBox>
</StackPanel>
i kod przycisku
private void Button_MouseMove(object sender, MouseEventArgs e)
{
popup.IsOpen = true;
}
ruchu kursora myszy, aby otworzyć okienko, kliknij w innym miejscu, aby zamknąć. Kliknij przycisk, aby mieć błąd: wyskakujące okienko to IsOpen == true (można je zobaczyć w polu wyboru lub z punktem przerwania w programie obsługi), gdy jest niewidoczne.
WTF?
I moim pierwotnym problemem jest, jak się wydaje, to, co ustawienie nie jest natychmiastowe. Aby przykład, gdy próbuję ustawić go false
w MouseMove
imprezy Popup
„s, potem dostać MouseEnter
i MouseMove
wydarzenia Button
opalane prawo podczas że
IsOpen = true;
samo z ustawieniem go true
istnieją 2 (!) MouseMove
zdarzenia występuje, umieścić tę linię do obsługi zdarzeń, aby zobaczyć to
System.Diagnostics.Trace.WriteLine("M");
Nie będzie 2 M w Output oknie VS, natomiast Popup
(gdy StayOpen=false
) zakłada, że przechwytuje zdarzenia myszy i robi to, ale nie od razu.
Czy ktoś może mi wyjaśnić, co się dzieje? Nie chcę żadnych zdarzeń podczas (lub krótko po? Jak sprawdzić, czy to prawda?) Ustawienie IsOpen
. Próbowaliśmy już dziesiątki rzeczy: Dispatcher.InvokeAsync
, zmienne, liczniki, itp
możliwe duplikat [WPF Popup traci ostrość, ale pozostaje otwarty] (http://stackoverflow.com/questions/14404897/wpf-popup-loses-focus-but-stays-opened). Zobacz odpowiedź tam: najprawdopodobniej powiązanie z IsOpen powoduje, że właściwość StaysOpen nie działa poprawnie ... – qqbenq
@qqbenq, nie ma nic wspólnego z fokusem. Wiązanie tutaj polega jedynie na zademonstrowaniu problemu (usunięcie go i użycie breakpoint = tego samego problemu). – Sinatr
'Okno podręczne nie otwiera się automatycznie, gdy wskaźnik myszy przesunie się nad obiektem nadrzędnym. Jeśli chcesz, aby okno podręczne było automatycznie otwierane, użyj etykiety ToolTip lub ToolTipService. Aby uzyskać więcej informacji, zobacz Omówienie ToolTip "wzięte z [tutaj] (http://msdn.microsoft.com/en-us/library/ms749018 (v = vs.110) .aspx) – Kcvin