Я создал MenuBarButton.cs
CustomControl, в котором я наследую от класса Button
, чтобы добавить изображение и текст к кнопке, как показано на рисунке ниже.
Вот мой класс управления:
public class MenuBarButton : Button
{
public static readonly DependencyProperty ItemNameProperty =
DependencyProperty.Register(
"ItemName", // Property name
typeof(string), // Property type
typeof(MenuBarButton) // Property owner
);
public string ItemName
{
get { return (string)GetValue(ItemNameProperty); }
set { SetValue(ItemNameProperty, value); }
}
public static readonly DependencyProperty SourceProperty =
DependencyProperty.Register(
"Source", // Property name
typeof(ImageSource), // Property type
typeof(MenuBarButton) // Property owner
);
public ImageSource Source
{
get { return (ImageSource)GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}
static MenuBarButton()
{
DefaultStyleKeyProperty.OverrideMetadata(
typeof(MenuBarButton),
new FrameworkPropertyMetadata(typeof(MenuBarButton))
);
}
}
И стиль - вот где я немного застрял. Пока у меня есть это:
<Style TargetType="{x:Type local:MenuBarButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MenuBarButton}">
<Button>
<Grid HorizontalAlignment="Center">
<Image Source="{TemplateBinding Source}" />
<TextBlock Text="{TemplateBinding ItemName}" />
</Grid>
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Но в идеале я хотел бы определить пользовательскую форму для кнопки, сохранив при этом остальные функции, такие как наведение курсора и нажатие кнопки. Я действительно хотел сделать это с помощью настраиваемого элемента управления, потому что мне надоело создавать кнопки с Image
и TextBlock
внутри снова и снова.
Нужно ли мне определять отдельный стиль для формы кнопки явно или есть способ сделать это внутри словаря MenuBarButtonStyle?