Название немного расплывчатое, проблема в следующем:
Я реализую кнопку Silverlight 4, заменяя шаблон своим собственным. Можно ли привязать радиус угла границы к высоте кнопки?
Например, пользователь может установить высоту в конструкторе равной 30, тогда радиус угла внутренней границы шаблона должен быть 15. Если высота равна 50, тогда радиус угла должен быть равен 25 и т. Д.
Если возможно, мне нужно решение на чистом XAML.
Спасибо
Ответ 1 · рейтинг 3 · AnthonyWJones
Это не чистое решение 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 в привязке шаблона. Конечно, теперь вы снова переключаетесь на смешивание, добавляете этот элемент управления на поверхность и творчески подходите к стилю.