Border.CornerRadiusProperty
является свойством зависимости Border, установка его на Button ничего не даст.
Если вы поместите курсор редактирования на кнопку в своем окне XAML, go на странице свойств нажмите на маленький квадрат справа от «Разное -> Шаблон» и выберите «Преобразовать в новый ресурс», после чего VS расширит шаблон как локальный ресурс для просмотра и редактирования. Взгляд на этот шаблон показывает, что, хотя в шаблоне присутствует граница, она поддерживает только границы bru sh и толщины:
<Border x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
Так что, если вы хотите поддерживать углы на кнопках, вам понадобится изменить этот шаблон и создать свойство для его привязки, которое вы затем можете установить в объявлениях кнопок. Одним из способов сделать это является подкласс Button
и добавление туда свойства, такого как BorderCornerRadius
. Другой способ - создать вложенное свойство, которое затем можно применить к любому элементу framework, включая Button:
public static class ButtonHelper
{
public static CornerRadius GetBorderCornerRadius(DependencyObject obj)
{
return (CornerRadius)obj.GetValue(BorderCornerRadiusProperty);
}
public static void SetBorderCornerRadius(DependencyObject obj, CornerRadius value)
{
obj.SetValue(BorderCornerRadiusProperty, value);
}
public static readonly DependencyProperty BorderCornerRadiusProperty =
DependencyProperty.RegisterAttached("BorderCornerRadius", typeof(CornerRadius), typeof(ButtonHelper), new PropertyMetadata(new CornerRadius(0)));
}
Затем вы можете изменить шаблон, чтобы использовать это присоединенное свойство для установки радиус угла границы:
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{Binding (local:ButtonHelper.BorderCornerRadius), RelativeSource={RelativeSource TemplatedParent}}"
... etc ...
Теперь вы можете использовать это вместо Border.CornerRadius
. Чтобы сделать это в XAML, вы просто делаете это:
<Button x:Name="theButton" Width="100" Height="100"
Template="{DynamicResource ButtonControlTemplate1}"
local:ButtonHelper.BorderCornerRadius="20" />
Или вы можете сделать это с помощью code-behind, как в приведенном выше примере кода (не забывайте, что вам все равно нужно переопределить шаблон управления) :
Style style = new Style(typeof(Button));
style.Setters.Add(new Setter(ButtonHelper.BorderCornerRadiusProperty, new CornerRadius(20)));
theButton.Style = style;
ОБНОВЛЕНИЕ: ответ, с которым вы связались, работает, изменив свойство для стиля Border
по умолчанию, чего вы могли бы достичь в коде, сделав это вместо этого:
Style style = new Style(typeof(Border));
style.Setters.Add(new Setter(Border.CornerRadiusProperty, new CornerRadius(20)));
theButton.Resources.Add(typeof(Border), style);
Проблема в том, что он будет применен к всем границам в этой кнопке, не только к шаблону кнопки, но и к любому из содержимого или его DataTemplates et c. Рано или поздно, когда сложность вашего GUI возрастет, это может снова преследовать вас. В целом, я считаю, что, хотя ярлыки, подобные приведенным выше, позволят выполнить работу в краткосрочной перспективе, при правильном выполнении задач у вас будет гораздо меньше проблем.