2009-04-30 17 views

Respuesta

0

actualiza después de cavar más

Hay un método que se ReadLocalValue estúpidamente Leer en lugar de Obtener tan difícil de detectar en IntelliSense. (Creo que el libro WPF de Apress tenía una nota sobre esto en realidad.) Devolverá UnsetValue si el valor no se ha establecido.

if (ReadLocalValue(Control.DataContextProperty) != 
    DependencyProperty.UnsetValue) 
{ 
    // Data context was set locally. 
} 

Si por alguna razón necesita para obtener todos los propiedades establecidas a nivel local, puede utilizar LocalValueEnumerator.

LocalValueEnumerator enumerator = GetLocalValueEnumerator(); 
while (enumerator.MoveNext()) 
{ 
    if (enumerator.Current.Property == Control.DataContextProperty) 
    { 
     // DataContext was set locally 
    } 
} 

Y estos dos métodos realmente me hacen maravilla. Lea en lugar de Obtener en ReadLocalValue y una colección que no puede repetir con foreach en GetLocalValueEnumerator. Es como .Net tiene estos buenos elementos estándar que el equipo de WPF simplemente decidió ignorar.

+0

Estaba usando 'ReadLocalValue' antes para determinar si se estableció un valor en un' Panel' personalizado. Esto condujo a un comportamiento realmente extraño en el que cuando un estilo aplicaba un valor, mi panel aún creía que el valor no estaba establecido. Solo cuando se llamaba a 'SetValue', el panel comenzaba a delinear mis elementos de la forma en que se suponía que debían, aunque' GetValue' devolvió los valores correctamente. La forma correcta de hacerlo es según [la respuesta de Kent] (http://stackoverflow.com/a/809480/590790), que le proporciona toda la información, en lugar de solo el efecto secundario (valor local). –

0

un enumerador es estándar, simplemente no proporcionan una colección que utiliza ese enumerador como resultado de su método GetEnumerator (que es lo que hace que For Each funcione). también, desde mi experiencia, generalmente es más fácil escribir algoritmos jerárquicos en términos de enumeradores en lugar de colecciones, por lo que no me sorprende que no proporcionen esto.

Cuestiones relacionadas