Я создал пользовательский элемент управления для ImageButton как
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Local:ImageButton}">
<StackPanel Height="Auto" Orientation="Horizontal">
<Image Margin="0,0,3,0" Source="{Binding ImageSource}" />
<TextBlock Text="{TemplateBinding Content}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Класс ImageButton похож
public class ImageButton : Button
{
public ImageButton() : base() { }
public ImageSource ImageSource
{
get { return base.GetValue(ImageSourceProperty) as ImageSource; }
set { base.SetValue(ImageSourceProperty, value); }
}
public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register("Source", typeof(ImageSource), typeof(ImageButton));
}
Однако я не могу связать ImageSource с изображением как: (Этот код находится в Папке UI, и изображение находится в папке Resource),
<Local:ImageButton x:Name="buttonBrowse1" Width="100" Margin="10,0,10,0"
Content="Browse ..." ImageSource="../Resources/BrowseFolder.bmp"/>
Но если я беру простое изображение, оно отображено, если тот же источник указан. Кто-либо может сказать мне, что должно быть сделано?
Вам необходимо заменить Binding
в ControlTemplate на TemplateBinding
, как вы это делали для Контента. property:
<Image Margin="0,0,3,0" Source="{TemplateBinding ImageSource}" />
Кроме того, определение вашего DependencyProperty неверно. Строка должна читать ImageSource
вместо просто Source
:
DependencyProperty.Register("ImageSource", typeof(ImageSource), ...
Я не знаю, вызывает ли / где этот конфликт имен какие-либо проблемы, но, по крайней мере, настоятельно рекомендуется использовать точное имя фактического свойства CLR.
РЕДАКТИРОВАТЬ: Вам также нужно будет изменить TargetType
вашего стиля на ImageButton
:
<Style TargetType="{x:Type Local:ImageButton}">