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