在WPF扩展控件上更改边框的角半径?

在WPF扩展控件上更改边框的角半径?,wpf,expander,cornerradius,Wpf,Expander,Cornerradius,WPF的Expander控件中视觉树的最高层是一个边界元素,请参见屏幕截图。默认情况下,其拐角半径为3。是否可以修改此值 现在我将留下标记作为答案,但我成功地实现了以下解决方案: 使用我获得了用于“标准”扩展控件的样式/控件模板 然后,在发现它的行为与预期不符后,我发现该行做出了一个行为,修改了ControlTemplate中第一个找到的边框。您可以在需要修改的地方轻松地使用新属性扩展行为 您可以更改控件模板。以下链接中的msdn中提供了扩展程序模板。 /// <summary> /

WPF的Expander控件中视觉树的最高层是一个边界元素,请参见屏幕截图。默认情况下,其拐角半径为3。是否可以修改此值


现在我将留下标记作为答案,但我成功地实现了以下解决方案:

使用我获得了用于“标准”扩展控件的样式/控件模板

然后,在发现它的行为与预期不符后,我发现该行做出了一个行为,修改了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>