#c# #wpf #silverlight #templates #controls
#c# #wpf #silverlight #шаблоны #элементы управления
Вопрос:
У меня есть следующий класс:
namespace Controls
{
public class DropDownButton : Control
{
public DropDownButton()
{
this.DefaultStyleKey = typeof(DropDownButton);
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
}
}
}
И в XAML:
<Style TargetType="Controls:DropDownButton">
<Setter Property="FontSize" Value="10"/>
<Setter Property="Height" Value="202"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<Button Content="Button1">
<Button.Template>
<ControlTemplate TargetType="Button">
</ControlTemplate>
</Button.Template>
</Button>
</Setter.Value>
</Setter>
<Setter Property="MinWidth" Value="65"/>
</Style>
У меня есть две проблемы (возможно, связанные): кнопка в xaml не отображается в элементе управления, и у элемента управления вообще не вызывается функция OnApplyTemplate() . Единственное, на что, по-видимому, реагирует элемент управления, — это установка его размеров…
Комментарии:
1. Вы действительно устанавливаете шаблон на кнопку, а не на элемент управления, содержащий кнопку?
2.
Template
ожидает шаблон элемента управления, но в вашемSetter.Value
у вас естьButton
. Я бы ожидал какого-то исключения.3. оооо, я попытался обернуть его в теги ControlTemplate, и это сработало.. Раньше я не получал исключений, хотя это странно…
4. Итак, это ответило на вопрос? Если это так, я мог бы опубликовать его в качестве ответа…
5. да, продолжайте, и я отмечу это как ответ.
Ответ №1:
Template
Отсутствует его элемент ControlTemplate
:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate> <!-- This -->
<Button Content="Button1">
<!-- ... -->
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>