Как установить свойства субконтроля - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно много кнопок, которые содержат изображение и текст.Вот почему я не хочу использовать

<Button>
  <Image></Image>
  <TextBlock></TextBlock>
</Button>

Поэтому я создал новый ImageTextButton

public class ImageTextButton: Button
{ 
  public TextBlock Label
  {
    get { return (Label)GetValue( LabelProperty ); }
    set { SetValue( LabelProperty, value ); }
    }
    public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
                                                                       name: nameof( Label ),
                                                                       propertyType: typeof( TextBlock ),
                                                                       ownerType: typeof( ImageTextButton ) );

  public PSImage Image
  {
    get { return (Image)GetValue( ImageProperty ); }
    set { SetValue( ImageProperty, value ); }
    }
  public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(
                                                                       name: nameof( Image ),
                                                                       propertyType: typeof( Image ),
                                                                       ownerType: typeof( ImageTextButton) );

  public ImageTextButton()
  {
    StackPanel panel = new StackPanel();
    panel.Children.Add( Image );
    panel.Children.Add( Label );
    panel.Orientation = Orientation.Horizontal;
    Content = panel;
  }

Настройка текста в коде c # работает отлично, но есть ли возможность его ввестив XAML?

Можете ли вы помочь мне или дать подсказку?

1 Ответ

0 голосов
/ 14 февраля 2019

Вы должны добавить в свой класс зависимость string вместо свойства Label.Затем можно просто установить свойство элемента управления в XAML следующим образом:

<local:ImageTextButton YourTextProperty="some string.." />

Элемент Label должен быть определен в шаблоне пользовательского элемента управления и привязан к свойству зависимостей string.

И класс ImageTextButton, вероятно, должен быть UserContol вместо пользовательского элемента управления, поскольку он представляет собой просто набор встроенных элементов управления:

<UserControl ...>
    <Button>
        <Image></Image>
        <TextBlock Text="{Binding YourTextProperty, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock>
    </Button>
</UserControl>

Конечно, вы можете добавить несколькодругие свойства зависимостей для UserControl и привязать их к соответствующим свойствам элементов в XAML таким же образом.

Боюсь, что вы не можете сделать что-то вроде <local:ImageTextButton LabelProperty.Content="some string.." /> в XAML.

Конечно, вы можете установить свойство зависимости Label для элемента Label, например, если это то, что вы хотите:

<local:ImageTextButton>
    <local:ImageTextButton.Label>
        <Label Content="..." /> 
     </local:ImageTextButton.Label>
</local:ImageTextButton>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...