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 コントロールを作成して、通常のテンプレート バインディングを実行できるようにする必要がありますか?それとも別の方法がありますか?
ありがとうベン