Проблема чтения AttachedProperty в ControlTemplate - PullRequest
1 голос
/ 10 августа 2011

Это мое прикрепленное свойство:

public class MyButtonThing
{
    public static string GetText2(DependencyObject obj)
    {
        return (string)obj.GetValue(Text2Property);
    }
    public static void SetText2(DependencyObject obj, string value)
    {
        obj.SetValue(Text2Property, value);
    }
    public static readonly DependencyProperty Text2Property =
        DependencyProperty.RegisterAttached("Text2", 
        typeof(string), typeof(System.Windows.Controls.Button));
}

Это мой ControlTemplate:

EDIT это будет работать нормально:

<Window.Resources>
    <ControlTemplate TargetType="{x:Type Button}" 
                     x:Key="MyButtonTemplate">
        <Border>
            <DockPanel LastChildFill="True">
                <TextBlock Text="{TemplateBinding Content}" 
                           DockPanel.Dock="Top"/>
                <TextBlock Text={Binding RelativeSource={RelativeSource
                          AncestorType=Button},
                          Path=(local:MyButtonThing.Text2)}"  />
            </DockPanel>
        </Border>
    </ControlTemplate>
</Window.Resources>

<Button Template="{StaticResource MyButtonTemplate}" 
        local:MyButtonThing.Text2="Where's Waldo"
        >Hello World</Button>

Моя проблема?Text2 правильно отображается в Desginer, а не во время выполнения.

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Вы устанавливаете значение на кнопку, и оно прикрепляется, следовательно:

{Binding RelativeSource={RelativeSource AncestorType=Button},
         Path=(local:MyButtonThing.Text2)}
0 голосов
/ 10 августа 2011

Вы привязываетесь к DataContext из TextBox, который не имеет Text2 свойства

Используйте это вместо:

<TextBlock Text="{Binding RelativeSource={RelativeSource Self},
                   Path=local:MyButtonThing.Text2}" />

Устанавливает DataContext TextBox для элемента управления TextBox, а не DataContext TextBox

...