WPF: Как мне создать кнопку «шаблон», которая применяет стиль и имеет изображение? - PullRequest
0 голосов
/ 22 января 2010

В моем приложении WPF есть несколько мест, где мне нужна кнопка, похожая на обычную кнопку, но:

  1. На нем отображается определенный значок (определенный как {StaticResource EditIcon})
  2. Применяется стиль (определенный как {StaticResource GrayOutButtonStyle})

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

-

Если это поможет, то ниже я сейчас делаю, но мне сказали, что это неправильно:

Обновлено: это неправильный путь? Есть ли способ исправить это так, чтобы это был «правильный путь»?

Я определяю кнопку как шаблон с ключом EditButton:

<ControlTemplate x:Key="EditButton" TargetType="{x:Type Button}">
     <Button Style="{StaticResource GrayOutButtonStyle}" 
             Command="{TemplateBinding Command}">
        <Image x:Name="editImage" Source="{StaticResource EditIcon}" />
     </Button>
</ControlTemplate>

Затем я объявляю кнопку с шаблоном EditButton в каждом месте, где я хочу использовать его в приложении. Я также указываю Команду для вызова здесь:

<Button Template="{StaticResource EditButton}" Command="..." />

Разве это не правильно? Как правильно это сделать?

Ответы [ 2 ]

1 голос
/ 22 января 2010

Другой подход:

Рассматривали ли вы создание пользовательского элемента управления? Таким образом, вы можете создавать свои собственные атрибуты для установки изображения, содержащегося в кнопке, и вам не нужно полагаться на несколько стилей.

<myControl:MyButton x:Name="oneButton" ImageSource="MyButton.png" />
<myControl:MyButton x:Name="anotherButton" ImageSource="MyOtherButton.png" />

class MyButton {

  private string imageSource;
  public string ImageSource {
    get {
      return this.imageSource;
    }
    set {
      this.imageSource = value;
      //set the image control's source to this.imageSource
    }
  }
}
0 голосов
/ 22 января 2010

Вы можете создать стиль, нацеленный на все кнопки вашего приложения. Сделайте это, просто создайте стиль, не давая ему ключ:

<Style TargetType={x:Type Button}>
</Style>

Затем в Style вы можете добавить сеттер, который устанавливает свойство Template:

<Setter Property="Template">
  <Setter.Value>
    <!-- whatever you want -->
  </Setter.Value>
</Setter>
...