Estoy tratando de usar una propiedad adjunta para activar un cambio de estilo en un UIElement
cuando se desencadena un evento.Propiedad adjunta para actualizar el desencadenador de estilo en el evento
Aquí es el escenario del caso:
un usuario ve un TextBox
, para centrarse luego unfocuses ella. En algún lugar de una propiedad adjunta, se da cuenta de este evento LostFocus
y establece una propiedad (¿en algún lugar?) Para decir que es HadFocus
.
El estilo en el cuadro de texto luego sabe que debe tener un estilo diferente en función de esta propiedad HadFocus.
Así es como me imagino que el margen de beneficio para mirar ...
<TextBox Behaviors:UIElementBehaviors.ObserveFocus="True">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Behaviors:UIElementBehaviors.HadFocus" Value="True">
<Setter Property="Background" Value="Pink"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
He intentado un par de combinaciones de las propiedades asociadas a conseguir este trabajo, mi último intento tiros un XamlParseException
indicando "La propiedad no puede ser nula en Trigger".
public class UIElementBehaviors
{
public static readonly DependencyProperty ObserveFocusProperty =
DependencyProperty.RegisterAttached("ObserveFocus",
typeof (bool),
typeof (UIElementBehaviors),
new UIPropertyMetadata(false, OnObserveFocusChanged));
public static bool GetObserveFocus(DependencyObject obj)
{
return (bool) obj.GetValue(ObserveFocusProperty);
}
public static void SetObserveFocus(DependencyObject obj, bool value)
{
obj.SetValue(ObserveFocusProperty, value);
}
private static void OnObserveFocusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var element = d as UIElement;
if (element == null) return;
element.LostFocus += OnElementLostFocus;
}
static void OnElementLostFocus(object sender, RoutedEventArgs e)
{
var element = sender as UIElement;
if (element == null) return;
SetHadFocus(sender as DependencyObject, true);
element.LostFocus -= OnElementLostFocus;
}
private static readonly DependencyPropertyKey HadFocusPropertyKey =
DependencyProperty.RegisterAttachedReadOnly("HadFocusKey",
typeof(bool),
typeof(UIElementBehaviors),
new FrameworkPropertyMetadata(false));
public static readonly DependencyProperty HadFocusProperty = HadFocusPropertyKey.DependencyProperty;
public static bool GetHadFocus(DependencyObject obj)
{
return (bool)obj.GetValue(HadFocusProperty);
}
private static void SetHadFocus(DependencyObject obj, bool value)
{
obj.SetValue(HadFocusPropertyKey, value);
}
}
¿Alguien me puede indicar?
Esa es la solución, gracias por su ayuda: o) – mortware