Шаблон в вложенном шаблоне в Silverlight 4
-
28-10-2019 - |
Вопрос
Я внедрил элемент управления 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>
Но я получаю ошибку из -за привязки шаблона на изображении. Я сортируюсь, почему, это потому, что шаблон изменился сейчас, поэтому контекст связывания не тот, но я не знаю, как его преодолеть.
Нужно ли мне создать отдельный элемент управления изображением, чтобы я мог просто сделать обычную привязку шаблона или есть иначе?
Спасибо Бен
Решение
Мне удалось заставить это работать, изменив стиль следующим образом:
<Style TargetType="appControls:CommandTextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="appControls:CommandTextBox">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{TemplateBinding Text}"/>
<Button Grid.Column="1" >
<Button.Content>
<Image DataContext="{TemplateBinding Image}" Source="{Binding}" />
</Button.Content>
</Button>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я не использую отдельный шаблон для кнопки. Мой XAML с контролем:
<controls:CommandTextBox Text="Text" Image="/MyApp.Silverlight;component/Assets/Images/Amber_Triangle.png"></controls:CommandTextBox>
Похоже, что это достигает результата, который вы были после. Управление рендерирует на моей тестовой странице, как и ожидалось.