2016-09-16 3 views
0

Grund, warum ich dies tun möchte, ist UI-Automatisierung. Unsere UI-Automatisierungssoftware findet Elemente über das Attribut Name/Uid. Das name-Attribut kann nicht an irgendetwas gebunden werden und die Uid scheint nur eine OneTime-Bindung zu haben (selbst wenn sie auf OneWay gesetzt ist). Das Binden der Tag-Eigenschaft funktioniert, hat jedoch eine visuelle Konsequenz. Die Idee war, eine eigene Eigenschaft für alle UI-Elemente zu erstellen, die die Uid-Eigenschaft überschreiben. HierWPF DependencyProperty überschreiben Uid für alle Steuerelemente

ist, was ich habe, so weit und wie ich dachte, es könnte

namespace MyApplication.Shared.Controls 
{ 
    public class RxUidAttributeExtension : Control 
    { 
     public static readonly DependencyProperty RxUidProperty = DependencyProperty.RegisterAttached("RxUid", typeof(string), typeof(RxUidAttributeExtension), new FrameworkPropertyMetadata("", RxUidChanged) 
     { 
      BindsTwoWayByDefault = true, 
      DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged 
     }); 

     private static void RxUidChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      var metadata = RxUidProperty.GetMetadata(typeof(RxUidAttributeExtension)); 
      UidProperty.OverrideMetadata(typeof(UIElement), new UIPropertyMetadata("RxOverridden")); //override Uid property -> exception 
     } 

     public static string GetRxUid(DependencyObject d) 
     { 
      return (string)d.GetValue(RxUidProperty); 
     } 

     public static void SetRxUid(DependencyObject d, string value) 
     { 
      d.SetValue(RxUidProperty, value); 
     } 
    } 
} 

Und in XAML arbeiten:

<DockPanel Name="myNameNeverChanges" 
        controls:RxUidAttributeExtension.RxUid="{Binding MyProperty, Mode=OneWay}" /> 

Was ich will, ist, dass Änderungen auf RxUid die Uid Eigenschaft beeinflussen sollte.

Warum ich denke, das sollte funktionieren: Link - "Sie können Metadaten für jede Abhängigkeitseigenschaft überschreiben". Die Ausnahme sagt etwas über bereits registriert:/

  • Liste item

Antwort

0

Ok funktioniert es wie @Clemens vorgeschlagen, aber es scheint auch OneWay von Uid funktioniert so meine ganze Frage ist veraltet. Es ist nur das Ranorex Spy Tool, das die geänderte Uid nicht korrekt anzeigt. Die Tests funktionieren perfekt, nur das Spy Tool hat diesen kleinen Fehler.

Hier ist eine Version, die etwas sauberer statt Casting ist:

d.SetValue(UIElement.UidProperty, e.NewValue); //override Uid property 
Verwandte Themen