1

ButtonクラスからImageButtonを派生させました。カスタムプロパティを使用してテキストを設定できるようにしたい。

ImageButton XAML

<Button x:Class="MyProject.ImageButton"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="50" Width="75" Template="{DynamicResource BlueButton}">
    <StackPanel>
        <TextBlock Text="{Binding Path = ImageButton.ButtonText}" TextWrapping="Wrap" Foreground="White"/>
    </StackPanel>
</Button>

背後にあるImageButtonコード

    public partial class ImageButton : Button
    { 
        public string ButtonText
        {
            get { return (string)GetValue(ButtonTextProperty); }
            set { SetValue(ButtonTextProperty, value); }
        }

        public static readonly DependencyProperty ButtonTextProperty =
            DependencyProperty.Register("ButtonText", typeof(string), typeof(ImageButton), new UIPropertyMetadata(string.Empty));

        public ImageButton()
        {
            InitializeComponent();
        }
    }

クライアントコード:

<local:ImageButton Margin="114,15.879,96,15.878" Grid.Row="2" ButtonText="test"/>

ボタンにテキストは表示されていません。何らかの理由で、バインディングが行われていないようです。私は何が間違っているのですか?

4

2 に答える 2

3

セットがないDataContextため、データバインディングは、バインドする必要のあるソースオブジェクトを認識しません。

これを解決する最も簡単な方法は、外部コントロールに名前を付け、ElementNameバインディングで使用して参照することです。

<Button x:Class="MyProject.ImageButton"
        x:Name="myImageButton"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="50" Width="75" Template="{DynamicResource BlueButton}">
    <StackPanel>
        <TextBlock Text="{Binding ElementName=myImageButton, Path=ButtonText}" 
                   TextWrapping="Wrap" Foreground="White"/>
    </StackPanel>
</Button>
于 2012-06-21T20:50:55.337 に答える
0

これを変える

 <TextBlock Text="{Binding Path = ImageButton.ButtonText}" 

   <TextBlock Text="{Binding Path = ButtonText}" 
于 2012-06-21T20:57:31.030 に答える