6

Tengo un problema con un TabControl, un TextBox y una validación ToolTip.Información de herramientas de validación restante en TabControl

Imagine tener un TabControl con dos TabItems. En el primer artículo hay un simple TextBox. Esta propiedad TextBoxText está vinculada a una propiedad de cadena del UserControl en sí con Mode=TwoWay y ValidatesOnExceptions=True. El colocador de esa propiedad Text lanza una excepción cada vez que se establece algo.

La sección Resources del UserControl contiene un nuevo estilo por defecto para el TextBox y la validación ToolTip (los estilos y las plantillas sin embargo se toman de la MSDN).

Ahora introduzca algo en el TextBox y dejar que la validación ToolTip aparece:

enter image description here

luego cambiar a la segunda pestaña. La información sobre herramientas de validación sigue siendo:

enter image description here

He producido una solución VS que contiene una aplicación de Silverlight que demuestra el problema. El archivo zip de la solución VS está disponible here.

¿Alguien ha tenido problemas similares o incluso una solución para ese problema?

Descargo de responsabilidad: Hay una pregunta similar here on StackOverflow con respecto a Silverlight 4 que no ha sido respondida desde hace aproximadamente un año y medio. Ya publiqué esa pregunta en silverlight.net pero no recibí ninguna respuesta durante varios días.

Respuesta

3

Creo que esto es un error de la TabControl -aplicación. He aplicado el este comportamiento para solucionar este problema en nuestra aplicación:

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

la información sobre herramientas de validación es una función implícita en silverlight 5. Borre el nodo "UserControl.Resources" en su "usuario de página principal" y tendrá el comportamiento esperado.

[EDIT] no he leído el final de su pregunta, lo siento :)

+0

Gracias por su respuesta, eliminando efectivamente los recursos resuelve el problema, pero no es una opción en mi caso porque necesito estos controles de estilo. Acabo de incluir el estilo predeterminado de MSDN en mi ejemplo para demostrar que mis estilos no están causando este problema. – Spontifixus

Cuestiones relacionadas