Domanda

Ho un controllo che si espande quando IsMouseOver è impostata su true utilizzando un trigger. All'interno di tale controllo, c'è qualche campo di testo che hanno qualche convalida di base. Il mio problema è che quando si verifica un errore di convalida e passaggio del mouse sopra il bordo rosso intorno la casella di testo (quasi garantito per accadere come utente sposta il mouse al centro della casella di testo per modificare il valore), l'IsMouseOver viene impostata su false e si chiude di controllo .

Errore di convalida per caselle di testo:

<Style TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{Binding 
                Path=(Validation.Errors)[0].ErrorContent, 
                RelativeSource={x:Static RelativeSource.Self}}" />
        </Trigger>
    </Style.Triggers>
</Style>

trigger per il controllo spettacolo:

<DataTrigger Binding="{Binding ElementName=TabControl_TabPanel, Path=IsMouseOver}" Value="True">
    <Setter Property="Visibility" Value="Visible" />
</DataTrigger>

UPDATE: IsMouseOver è anche sempre impostata su False quando right-click una casella di testo e aprire il menu contestuale

È stato utile?

Soluzione

Nel caso del menu di scelta rapida, le cose sono abbastanza chiare: si tratta di una finestra diversa (ad un livello basso), in modo che il controllo non può possibilmente rilevare nulla 'se' esso. Allo stesso modo, gli errori di convalida in WPF vengono visualizzati in modo complicato e contorto, e basti dire che in realtà non sono parte del vostro controllo sia.

Io suggerirei di utilizzare eventi di attivazione per lo scenario; è il mouse-over veramente necessario? Ci possono essere alcuni modi per farlo funzionare anche se ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top