2010-03-23 4 views
12

Tengo un TabItem que contiene un cuadro de lista, que tiene una colección obeservable de mi clase de feeds como fuente del elemento. Cuando actualizo/cargo los feeds en la colección, deseo desactivar la ventana principal para que el usuario no pueda hacer clic en otras cosas mientras se está ejecutando este proceso. Así que establecí tbCtrl.isEnabled=false; en mi control de pestañas en el formulario. A continuación, asigne un controlador de eventos al evento de finalización personalizado que se desencadena después de cargar todos los feeds.Los hipervínculos permanecen inactivos después de establecer isEnabled = true para el control principal

Todo funciona bien, sin embargo, los hipervínculos para los resultados que se muestran actualmente en el control de pestaña nunca se vuelven a habilitar (ni tampoco los siguientes que están fuera de vista debido al tamaño del cuadro de lista). Todos los otros resultados más abajo están bien, al igual que los resultados en la otra pestaña.

He intentado llamar al InvalidateVisual en el control de pestañas después de que todo haya terminado, para ver si eso hace la diferencia pero eso no parece causar ningún cambio.

Pude entenderlo si fueron todos los hipervínculos que lo hicieron, o solo los que se muestran actualmente, pero no entiendo por qué los que están fuera de desplazamiento tampoco funcionan.

Image of Issue http://i42.tinypic.com/5wm0qx.jpg

+0

Busco una respuesta a la misma cuestión. He vinculado el hipervínculo. He habilitado una propiedad con INotifyPropertyChanged. Cuando invoco el cambio de una manera, las actualizaciones de IsEnabled. Otra forma, no lo hace. (Ambos son hilos) - Pero un botón con el mismo enlace obtiene su IsEnabled cambiado.Todo lo que me queda es una vaga suposición de que tiene algo que ver con que el documento de flujo actúe de manera diferente a un control, ¿pero no estoy seguro de por qué? Lo más extraño: si configuro el enlazado del hipervínculo a IsEnabled = "{Binding ElementName = AControlWithIsEnabledBinding, Path = IsEnabled}", ¡FUNCIONA !. Pero ¿cuánto de un truco es eso, eh? – Daryn

+0

Solo una nota, este problema parece estar solucionado a partir de .NET 4.6.1. Es importante tener esto en cuenta si está desarrollando en un entorno 4.6.1+ pero apuntando a versiones inferiores de .NET, ya que los estados habilitados para hipervínculos parecerán funcionar bien para usted, pero si alguien con una versión .NET más baja ejecuta su aplicación, se encontrarán con este problema. – Mogzol

Respuesta

6

he encontrado la respuesta para mi caso del hipervínculo no conseguir volver a habilitar, no está seguro de si se aplica a la suya:

He descubierto que cuando el control de los padres del hipervínculo está desactivado (IsEnabled = falso), el hipervínculo no recibirá notificaciones de cambios, por ejemplo IsEnabledChanged no se dispara, incluso cuando la propiedad enlazada cambia de valor.

Mi solución fue cambiar mi Xaml para que dejara de deshabilitar el control ancestro (lo que causaba que el padre del hipervínculo se desactivara). Con el padre (TextBlock) siempre habilitado, ahora el hipervínculo se actualiza correctamente siempre.

(Me molesta un poco que el enlace IsEnabled se comporte de manera diferente a Controls do, y no estoy seguro de lo que haría si no pudiera dejar el ancestro habilitado ... pero al menos esto me permite entender el problema que estaba teniendo, y me permite trabajar alrededor de ella)

Detalles:. WPF 3.5 SP1

14

llegué a la misma cuestión.

Lo que hice es unir el IsEnabled de HyperLink al padre y ponerlo en un recurso global de la aplicación.

<Style TargetType="{x:Type Hyperlink}"> 
    <Setter Property="IsEnabled" Value="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}" /> 
</Style> 
+0

si coloca explícitamente IsEnabled en HyperLink y lo vincula a algo que anulará este recurso global ¿no? –

+0

Funciona a la perfección. – AlexPi

+0

@Simon_Weaver Sí. Ver http://msdn.microsoft.com/en-us/library/ms743230(v=vs.110).aspx. El estilo es el sexto, el establecimiento explícitamente es el tercero y tiene una precedencia más alta. – HelloSam

0

No es solo HyperLinks. Parece ser más específicamente TextBlock que, por supuesto, es lo que utiliza para ajustar un HyperLink en WPF. Esto le dará a la misma cuestión:

<TextBlock> 
    <Run Text="Barcode:"/> 
    <InlineUIContainer BaselineAlignment="Center"> 
     <TextBox Text="{Binding OriginalPackage.BarcodeNumber}" /> 
    </InlineUIContainer> 
</TextBlock> 

Tenía la esperanza de establecer IsEnabled="True" sería solucionarlo pero no parece.

La solución más sencilla es utilizar un StackPanel con Orientation="Horizontal"

Cuestiones relacionadas