6

Ho un problema con uno TabControl, uno TextBox e una convalida ToolTip.Tooltip di validazione rimanente su TabControl

Immagina di avere un TabControl con due TabItems. Sul primo elemento c'è un semplice TextBox. Questa proprietà TextBoxText è associata a una proprietà stringa dello UserControl stesso con Mode=TwoWay e ValidatesOnExceptions=True. Il setter di quella proprietà Text genera un'eccezione ogni volta che viene impostato qualcosa.

La sezione Resources della UserControl contiene un nuovo stile di default per il TextBox e la convalida ToolTip (quegli stili e modelli tuttavia sono presi dal MSDN).

Ora immettere qualcosa nella TextBox e appaia la validazione ToolTip:

enter image description here

poi cambiare per la seconda scheda. La descrizione comandi validazione rimane:

enter image description here

ho prodotto una soluzione VS contenente un'applicazione Silverlight che dimostra la questione. L'archivio zip della soluzione VS è disponibile here.

Qualcuno ha avuto problemi simili o addirittura una soluzione per questo problema?

Disclaimer: C'è una domanda simile here on StackOverflow per quanto riguarda Silverlight 4 che non ha ricevuto risposta da circa un anno e mezzo. Ho già postato la domanda su silverlight.net ma non ho ricevuto risposte per diversi giorni.

risposta

3

Penso che questo sia un bug del TabControl -attuazione. Ho implementato il questo comportamento per risolvere questo problema nella nostra applicazione:

public class TabControlFixBehavior: Behavior<TabControl> 
{ 
    protected override void OnAttached() 
    { 
     AssociatedObject.SelectionChanged += AssociatedObjectOnSelectionChanged; 
     base.OnAttached(); 
    } 

    protected override void OnDetaching() 
    { 
     AssociatedObject.SelectionChanged -= AssociatedObjectOnSelectionChanged; 

     base.OnDetaching(); 
    } 

    private void AssociatedObjectOnSelectionChanged(object sender, SelectionChangedEventArgs args) 
    { 
     if (args.RemovedItems.Count > 0) 
     { 
      var oldTabItem = args.RemovedItems[0] as TabItem; 
      if (oldTabItem != null) 
      { 
       var popups = VisualTreeHelper.GetOpenPopups(); 
       foreach (var popup in popups) 
       { 
        var toolTip = popup.Child as ToolTip; 
        if (toolTip != null) 
        { 
         if (VisualTreeHelper.GetRoot(toolTip.PlacementTarget) == oldTabItem.Content) 
         { 
          popup.IsOpen = false; 
         } 
        } 
       } 
      } 
     } 
    } 
} 
0

il suggerimento di convalida è una funzione implicita in silverlight 5. Per favore cancella il nodo "UserControl.Resources" nella tua "pagina principale" usercontrol e avrai il comportamento previsto.

[EDIT] non ho letto la fine della tua domanda, mi spiace :)

+0

Grazie per la risposta, rimuovendo infatti le risorse risolve il problema, ma non è un'opzione nel mio caso perché ho bisogno di questi controlli stile. Ho appena incluso lo stile predefinito da MSDN nel mio esempio per dimostrare che questo problema non è causato dai miei stili. – Spontifixus