Я реализовал элемент управления, CommandTextBox, который я хочу сделать текстовым полем с кнопкой рядом с ним (так что он почти появляется внутри текстового поля).
Кнопка должна быть изображением, которое я могу связать с иконкой. Это довольно простые вещи ...
public class CommandTextBox : TextBox
{
/// <summary>
/// The image property.
/// </summary>
public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(
"Image", typeof(ImageSource), typeof(CommandTextBox), null);
/// <summary>
/// Initializes a new instance of the <see cref = "CommandTextBox" /> class.
/// </summary>
public CommandTextBox()
{
this.DefaultStyleKey = typeof(CommandTextBox);
}
/// <summary>
/// Gets or sets the image.
/// </summary>
/// <value>
/// The image.
/// </value>
public ImageSource Image
{
get
{
return (ImageSource)this.GetValue(ImageProperty);
}
set
{
this.SetValue(ImageProperty, value);
}
}
}
У меня шаблон такой ...
<Style TargetType="Controls:CommandTextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Controls:CommandTextBox">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{TemplateBinding Text}"/>
<Button Grid.Column="1"
Content="Search" >
<Button.Template>
<ControlTemplate>
<Image Source="{TemplateBinding Image}" />
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Но я получаю ошибку из-за привязки шаблона к изображению. Я понимаю, почему, потому что шаблон изменился сейчас, поэтому контекст привязки не тот, но я не знаю, как его преодолеть.
Нужно ли создавать отдельный элемент управления ImageButton, чтобы я мог просто выполнить обычное связывание с шаблоном или есть другой способ?
Спасибо
Бен