#silverlight #templates #custom-controls #expression-blend
#silverlight #шаблоны #пользовательские элементы управления #выражение-смешивание
Вопрос:
Заголовок немного нечеткий, проблема в:
Я внедряю кнопку Silverlight 4, заменяя шаблон своим собственным. Возможно ли привязать радиус угла границы к высоте кнопки?
Например, пользователь может установить высоту в конструкторе равной 30, тогда радиус угла внутренней границы шаблона должен быть равен 15. Если высота равна 50, то радиус угла должен быть 25 и т.д.
Если возможно, мне нужно чистое решение на XAML.
Спасибо
Ответ №1:
Это не чисто Xaml-решение. В конечном счете, вам нужно что-то, по крайней мере, для выполнения выражения y / 2, и это не то, что в настоящее время предлагается каким-либо существующим компонентом на основе Xaml.
Откройте проект в Vs2010. Добавьте новый элемент… «Шаблонный элемент управления Silverlight» назовите его «RoundEndedButton».
Замените исходный код на:-
public class RoundEndedButton : Button
{
public RoundEndedButton()
{
this.DefaultStyleKey = typeof(RoundEndedButton);
SizeChanged = new SizeChangedEventHandler(RoundEndedButton_SizeChanged);
}
public static readonly DependencyProperty CornerRadiusProperty =
DependencyProperty.Register(
"CornerRadius",
typeof(CornerRadius),
typeof(RoundEndedButton),
new PropertyMetadata(new CornerRadius()));
void RoundEndedButton_SizeChanged(object sender, SizeChangedEventArgs e)
{
SetValue(CornerRadiusProperty, new CornerRadius(e.NewSize.Height / 2));
}
}
В themes/ Generic.xaml измените его шаблон по умолчанию. Вот мой очень простой пример:-
<Style TargetType="local:RoundEndedButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:RoundEndedButton">
<Border x:Name="Background"
Background="{TemplateBinding Background}"
CornerRadius="{TemplateBinding CornerRadius}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Обратите внимание на использование дополнительного CornerRadius
свойства при привязке шаблона. Конечно, теперь вы переключаетесь обратно на blend, добавляете этот элемент управления на поверхность и проявляете творческий подход к стилю.