EDIT: Этот элемент управления можно использовать повторно в течение всего проекта столько раз, сколько вам нужно, он действует точно так же, как и любой другой элемент управления, и используется так же, как и любая другая библиотека управления. Эффект границы не действует, и вы можете добавить любой желаемый эффект зависания. Вот как это работает.
Добавить папку с именем CustomControls в ваше решение.
Создайте пользовательский элемент управления (WPF) с именем ImageButton в этой папке. Здесь добавлен настраиваемый код управления.
Теперь в вашем проекте должна была быть создана папка с именем Themes, в которой есть ресурс с именем generic.xaml. Откройте его и используйте код resourcecedictionary.
Теперь добавьте это в окне тега
xmlns:b="clr-namespace:MyProject.CustomControls"
Теперь вы можете использовать элемент управления в этом окне, как стольких раз, сколько вы хотели бы так же, как обычные кнопки, используя структуру тегов в конце ответ.
Вот что я сделал, вы можете установить источник, высоту и ширину изображения из главного окна, и все стандартные события кнопок есть.
Вот пользовательский элемент управления
namespace MyProject.CustomControls
{
public class ImageButton : Button
{
public static DependencyProperty SourceProperty =
DependencyProperty.Register(
"Source",
typeof(Uri),
typeof(ImageButton));
static ImageButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageButton), new FrameworkPropertyMetadata(typeof(ImageButton)));
}
public Uri Source
{
get { return (Uri)GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}
}
}
Вот стиль в ResourceDictionary, вы можете добавить событие наведения мыши и в button.pressed событие в секции триггеров или удалить триггеры и установить их на вашем окне.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:b="clr-namespace:MyProject.CustomControls">
<Style x:Key="{x:Type b:ImageButton}" TargetType="{x:Type b:ImageButton}">
<Setter Property="Height" Value="{Binding Path=Height, RelativeSource={RelativeSource TemplatedParent}}"/>
<Setter Property="Width" Value="{Binding Path=Width, RelativeSource={RelativeSource TemplatedParent}}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type b:ImageButton}">
<Grid x:Name="LayoutGrid">
<Image x:Name="_Image" HorizontalAlignment="Center" VerticalAlignment="Center" Width="{TemplateBinding Width}"
Source="{Binding Path=Source, RelativeSource={RelativeSource TemplatedParent}}" Height="{TemplateBinding Height}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="" TargetName="" Value=""/>
</Trigger>
<Trigger Property="Button.IsPressed" Value="True">
<Setter Property="" TargetName="" Value=""/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Чтобы использовать его в проекте добавить пространство имен к окну, а затем тег будет как этот
<b:ImageButton Source="Image.png" Height="50" Width="50" Click="do_Something"/>
В чем проблема с просто установкой изображения в качестве содержимого кнопки? – Domysee
Как насчет изображения наведения и нежелательных эффектов границы элемента управления Button? – eYe