You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF:自定义控件DependencyProperty属性绑定问题

实现依赖外部参数控制的WPF自定义Expander控件

我帮你把代码整理完整并补充关键逻辑,这样你的自定义控件就能正确响应外部传入的展开状态参数了:

XAML部分(myControl.xaml)

<Expander x:Name="Expander" Grid.Row="1" IsExpanded="True">
    <!-- 在这里添加Expander的内容,比如其他控件或布局容器 -->
</Expander>

C#代码部分(myControl.xaml.cs)

public partial class myControl : UserControl
{
    public myControl()
    {
        InitializeComponent();
    }

    // 注册用于接收外部展开状态的依赖属性
    public static readonly DependencyProperty IsExpandAllProperty = 
        DependencyProperty.Register(
            "IsExpandAll", 
            typeof(bool), 
            typeof(myControl), 
            new PropertyMetadata(true, OnIsExpandAllChanged));

    // 封装依赖属性的CLR属性,方便代码中直接访问
    public bool IsExpandAll
    {
        get { return (bool)GetValue(IsExpandAllProperty); }
        set { SetValue(IsExpandAllProperty, value); }
    }

    // 依赖属性值变化时的回调,同步更新内部Expander的展开状态
    private static void OnIsExpandAllChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        // 确保控件实例和新值的类型正确
        if (d is myControl currentControl && e.NewValue is bool newExpandState)
        {
            currentControl.Expander.IsExpanded = newExpandState;
        }
    }
}

关键说明:

  • 我把你截断的PropertyChangedCallback补全为OnIsExpandAllChanged,它会在外部传入的IsExpandAll属性值变化时自动触发
  • 依赖属性的默认值设为true,和你XAML里Expander的初始IsExpanded="True"保持一致,避免出现初始状态不一致的问题
  • 外部使用这个控件时,只需要通过绑定或者直接赋值IsExpandAll属性,就能轻松控制内部Expander的展开/折叠状态

内容的提问来源于stack exchange,提问作者Sarina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:29:58