在WPF扩展控件上更改边框的角半径?
WPF的Expander控件中视觉树的最高层是一个边界元素,请参见屏幕截图。默认情况下,其拐角半径为3。是否可以修改此值在WPF扩展控件上更改边框的角半径?,wpf,expander,cornerradius,Wpf,Expander,Cornerradius,WPF的Expander控件中视觉树的最高层是一个边界元素,请参见屏幕截图。默认情况下,其拐角半径为3。是否可以修改此值 现在我将留下标记作为答案,但我成功地实现了以下解决方案: 使用我获得了用于“标准”扩展控件的样式/控件模板 然后,在发现它的行为与预期不符后,我发现该行做出了一个行为,修改了ControlTemplate中第一个找到的边框。您可以在需要修改的地方轻松地使用新属性扩展行为 您可以更改控件模板。以下链接中的msdn中提供了扩展程序模板。 /// <summary> /
现在我将留下标记作为答案,但我成功地实现了以下解决方案: 使用我获得了用于“标准”扩展控件的样式/控件模板 然后,在发现它的行为与预期不符后,我发现该行做出了一个行为,修改了ControlTemplate中第一个找到的边框。您可以在需要修改的地方轻松地使用新属性扩展行为
您可以更改控件模板。以下链接中的msdn中提供了扩展程序模板。
/// <summary>
/// modifies the first found <see cref="Border"/> in the <see cref="ControlTemplate"/> of the attached <see cref="Control"/>
/// </summary>
public class ModifyBorderBehavior : Behavior<Control>
{
// ##############################################################################################################################
// Properties
// ##############################################################################################################################
#region Properties
/// <summary>
/// The new corner radius
/// </summary>
public CornerRadius CornerRadius
{
get => (CornerRadius)GetValue(CornerRadiusProperty);
set => SetValue(CornerRadiusProperty, value);
}
/// <summary>
/// The <see cref="CornerRadius"/> DependencyProperty.
/// </summary>
public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(ModifyBorderBehavior));
#endregion
// ##############################################################################################################################
// Constructor
// ##############################################################################################################################
#region Constructor
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Loaded += _OnLoaded;
}
private void _OnLoaded(object sender, RoutedEventArgs e)
{
//var children = VisualTree.GetVisualChildCollection<Border>(sender);
if (sender is Control control)
{
Border border = VisualTree.GetVisualChild<Border>(control);
if(ReadLocalValue(CornerRadiusProperty) != DependencyProperty.UnsetValue)
border.CornerRadius = CornerRadius;
}
}
#endregion
}
<Expander>
<i:Interaction.Behaviors>
<zls:ModifyBorderBehavior CornerRadius="0"/>
</i:Interaction.Behaviors>
</Expander>