पर स्टाइल ट्रिगर को अपडेट करने के लिए संलग्न संपत्ति मैं एक ईवेंट को निकाल दिए जाने पर UIElement
पर शैली परिवर्तन को ट्रिगर करने के लिए एक संलग्न संपत्ति का उपयोग करने का प्रयास कर रहा हूं।घटना
यहाँ स्थिति है:
एक उपयोगकर्ता एक TextBox
देखता है, और फिर केंद्रित यह unfocuses। किसी संलग्न संपत्ति में कहीं भी यह LostFocus
ईवेंट नोटिस करता है और यह कहता है कि यह HadFocus
है।
टेक्स्टबॉक्स पर शैली तब जानता है कि इसे इस HadFocus प्रॉपर्टी के आधार पर अलग-अलग शैली बनाना चाहिए।
यहाँ कैसे मैं मार्कअप देखने के लिए कल्पना है ...
<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>
मैं संलग्न गुण के कुछ संयोजन की कोशिश की है इस काम के प्राप्त करने के लिए, मेरे नवीनतम प्रयास फेंकता एक XamlParseException
बताते हुए "संपत्ति ट्रिगर पर शून्य नहीं हो सकती है।"
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);
}
}
कोई भी मुझे निर्देशित करने में सक्षम है?
यह ठीक है, आपकी मदद के लिए धन्यवाद: ओ) – mortware