Существуют различные варианты, от (ab) использования таких свойств, как Tag
до подкласса или композиции в UserControl
, вы также можете создать в приложениисвойство .
Возможно, самым чистым будет подкласс, тогда вы можете создать новое свойство зависимости для ImageSource
, которое вы затем будете использоватьможно связать в шаблоне по умолчанию, используя TemplateBinding
.
. Для создания подкласса вы можете использовать VS. Из новых элементов выберите Custom Control (WPF)
, это должно создать файл класса и добавитьбазовый стиль словаря ресурсов тем, который обычно находится в Themes/Generic.xaml
.Класс будет выглядеть так:
//<Usings>
namespace Test.Controls
{
public class ImageButton : Button
{
public static readonly DependencyProperty ImageProperty =
DependencyProperty.Register("Image", typeof(ImageSource), typeof(ImageButton), new UIPropertyMetadata(null));
public ImageSource Image
{
get { return (ImageSource)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
}
}
Теперь тема будет более сложной, вы можете просто скопировать один из шаблонов по умолчанию для кнопки и вставить его в стандартныйстиль.Тогда вам нужно только добавить свое изображение куда-нибудь, но с этой привязкой:
<Image Source="{TemplateBinding Image}" .../>
Когда вы используете этот элемент управления, вам больше не нужно ссылаться на стиль, так как все в стиле по умолчанию, теперь естьсвойство для изображения:
<controls:ImageButton Content="Lorem Ipsum"
Image="Img.png"/>
(Чтобы использовать Tag
, вы просто придерживаетесь обычной кнопки и используете TemplateBinding для тега и устанавливаете тег кнопок в URL)
Я забыл упомянуть еще одну возможность, которая использует динамические ресурсы, она немного многословна, но очень проста, см. мой ответ для моего примера.