在這裏,你有教程how to create a custom control。
[1.]添加名爲「ButtonImg」的新項目「Custom Control(WPF)」。
經過這一步,VS爲您創建兩個文件:「ButtonImg.cs」和「/Themes/Generic.xaml」。
[2.]添加幾個依賴屬性爲「ButtonImg.cs」文件:
我創建屬性:圖像源,文本,圖像的寬度和高度。
public class ButtonImg : Control
{
static ButtonImg()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ButtonImg), new FrameworkPropertyMetadata(typeof(ButtonImg)));
}
public ImageSource ImageSource
{
get { return (ImageSource)GetValue(ImageSourceProperty); }
set { SetValue(ImageSourceProperty, value); }
}
public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ButtonImg), new PropertyMetadata(null));
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(ButtonImg), new PropertyMetadata(string.Empty));
public double ImageWidth
{
get { return (double)GetValue(ImageWidthProperty); }
set { SetValue(ImageWidthProperty, value); }
}
public static readonly DependencyProperty ImageWidthProperty =
DependencyProperty.Register("ImageWidth", typeof(double), typeof(ButtonImg), new PropertyMetadata((double)30));
public double ImageHeight
{
get { return (double)GetValue(ImageHeightProperty); }
set { SetValue(ImageHeightProperty, value); }
}
public static readonly DependencyProperty ImageHeightProperty =
DependencyProperty.Register("ImageHeight", typeof(double), typeof(ButtonImg), new PropertyMetadata((double)30));
}
[3.]在這一步中,您必須爲您的新自定義控件創建模板。所以,你必須編輯下列文件「/Themes/Generic.xaml」:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfButtonImg">
<Style TargetType="{x:Type local:ButtonImg}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ButtonImg}">
<Button>
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Source="{TemplateBinding ImageSource}"
Height="{TemplateBinding ImageHeight}" Width="{TemplateBinding ImageWidth}"
Stretch="Uniform" />
<TextBlock Text="{TemplateBinding Text}" Margin="10,0,0,0" VerticalAlignment="Center" FontSize="20" />
</StackPanel>
</Button.Content>
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
[4]使用這個新的自定義控件的例子是以下幾點:
首先,你必須添加相應的命名空間:
xmlns:MyNamespace="clr-namespace:WpfButtonImg"
現在你可以使用這樣的:
<MyNamespace:ButtonImg ImageSource="/Images/plug.png" Text="Click me!" />
kmatyaszek已經提供了有關如何創建一個自定義的合作全面的回答ntrol。然而,解決你的問題有一個很快的方法,它使用'Content'和'Tag'屬性分別包含圖像和文本。它只涉及創建Style或DataTemplate資源,並且會避免創建自定義或用戶控件或派生的Button控件。如果你有興趣,我會寫一個答案。 – Clemens