Не является чистым решением 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
в привязке шаблона. Конечно, теперь вы переключаетесь обратно, чтобы смешать, добавить этот элемент управления на поверхность и проявить творческий подход к стилю.