【问题标题】:How to cast DependencyObject as FileInfo in PropertyChangedCallback如何在 PropertyChangedCallback 中将 DependencyObject 转换为 FileInfo
【发布时间】:2018-09-30 01:51:34
【问题描述】:

我有一个 FileInfo 类型的 DependencyProperty,在 PropertyChangedCallback 中,我无法将 DependencyObject 转换为 FileInfo 类型。

    public static readonly DependencyProperty TargetFileProperty =
        DependencyProperty.Register("TargetFile", typeof(System.IO.FileInfo), typeof(FileSelectGroup), new PropertyMetadata(propertyChangedCallback: new PropertyChangedCallback());

    private PropertyChangedCallback OnTargetFileChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var f = (System.IO.FileInfo)d; // THIS LINE GIVES ERROR BELOW
    }

错误是:

无法将类型“System.Windows.DependencyObject”转换为“System.IO.FileInfo”

我想我可能遗漏了一些明显的东西(我可能是)但Microsoftthis answer 似乎同意我在做大致正确的事情。

【问题讨论】:

    标签: c# wpf dependencyobject


    【解决方案1】:

    d指的是定义依赖属性的控件,即FileSelectGroup

    您应该能够将e.NewValue 转换为System.IO.FileInfo 以获得依赖属性的新值:

    private PropertyChangedCallback OnTargetFileChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var f = e.NewValue as System.IO.FileInfo;
        if (f != null)
        {
            //...
        }
    }
    

    或者,您可以将d 转换为FileSelectGroup 并访问控件的TargetFile 属性:

    private PropertyChangedCallback OnTargetFileChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var ctrl = d as FileSelectGroup;
        if (ctrl != null)
        {
            System.IO.FileInfo f = ctrl.TargetFile;
            if (f != null)
            {
    
            }
        }
    }
    

    【讨论】:

    • 好的,可以的(e.NewValue 版本是我刚才测试的)但是你知道为什么转换为 FileInfo 失败但其他类型显然可以正常工作吗?
    • 我不确定我是否理解您的问题。显然,您不能将任何不是 FileInfo 的内容转换为 FileInfo。在这种情况下,d 不是 FileInfo。
    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多