2010-01-22 3 views
0

Есть несколько мест в моем приложении WPF, где я нужна кнопка, которая выглядит & чувствует себя как обычная кнопка, но: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="..." /> 

Это не так? Каким будет правильный способ сделать это?

+0

Проверьте этот ответ: HTTP://stackoverflow.com/a/16539347/760893 – Sonhja

ответ

0

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

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

<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

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

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

Тогда в стиле, вы можете добавить сеттер, который устанавливает свойство шаблона:

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

Как использовать стиль для отображения изображения на кнопке и сказать, что он должен включать GrayOutButtonStyle? –

+0

Вы можете изменить ControlTemplate, чтобы включить изображение где-нибудь в дереве. Например, вы можете использовать сетку с 2 столбцами, поместить изображение в первый столбец и ContentPresenter во второй. – japf