c# wpf xaml binding attached-properties

c# - No se puede vincular una propiedad adjunta a otra propiedad de dependencia



wpf xaml (1)

Reemplace el UIElement en su definición de DependencyProperty a MyLibCommonProperties

public static readonly DependencyProperty TitleProperty = DependencyProperty.RegisterAttached( "Title", typeof(String), typeof(MyLibCommonProperties), // Change this line new FrameworkPropertyMetadata( "NoTitle", new PropertyChangedCallback(OnTitleChanged)) );

Creo que podría deberse a que el enlace utiliza implícitamente la clase padre especificada para llamar a SetTitle() por lo que está llamando a Label.SetTitle() lugar de MyLibCommonProperties.SetTitle()

Tuve el mismo problema con algunas propiedades personalizadas de TextBox. Si utilicé typeof(TextBox) entonces no podría enlazarme al valor, pero si usé typeof(TextBoxHelpers) entonces podría

Estoy escribiendo una biblioteca de control. En esta biblioteca hay algunos paneles personalizados que se rellenan con UIElements del usuario. Como cada elemento secundario de mi lib debe tener una propiedad de "Título", escribí lo siguiente:

// Attached properties common to every UIElement public static class MyLibCommonProperties { public static readonly DependencyProperty TitleProperty = DependencyProperty.RegisterAttached( "Title", typeof(String), typeof(UIElement), new FrameworkPropertyMetadata( "NoTitle", new PropertyChangedCallback(OnTitleChanged)) ); public static string GetTitle( UIElement _target ) { return (string)_target.GetValue( TitleProperty ); } public static void SetTitle( UIElement _target, string _value ) { _target.SetValue( TitleProperty, _value ); } private static void OnTitleChanged( DependencyObject _d, DependencyPropertyChangedEventArgs _e ) { ... } }

Entonces, si escribo esto:

<dl:HorizontalShelf> <Label dl:MyLibCommonProperties.Title="CustomTitle">1</Label> <Label>1</Label> <Label>2</Label> <Label>3</Label> </dl:HorizontalShelf>

todo funciona bien y la propiedad obtiene el valor especificado, pero si intento vincular esa propiedad a otra UIElement DependencyProperty como esta:

<dl:HorizontalShelf> <Label dl:MyLibCommonProperties.Title="{Binding ElementName=NamedLabel, Path=Name}">1</Label> <Label>1</Label> <Label>2</Label> <Label Name="NamedLabel">3</Label> </dl:HorizontalShelf>

se lanzaría una excepción: "No se puede establecer un ''Encuadernación'' en la propiedad ''Establecer título'' de tipo ''Etiqueta''. Un ''Encuadernación'' solo se puede establecer en una Propiedad de dependencia de un Objeto Dependencia."

¿Qué me estoy perdiendo? El enlace parece funcionar bien si en lugar de vincularlo a "Nombre" me enlace a alguna otra propiedad adjunta definida en MyLibCommonProperties.

Gracias por adelantado.