【问题标题】:XAML designer can't recognize other control properties (VS 2015)XAML 设计器无法识别其他控件属性(VS 2015)
【发布时间】:2015-09-17 20:55:50
【问题描述】:

我最近安装了 Visual Studio 2015 Community,我有一个大型 WPF 项目,最初是在 Visual Studio 2010 中开发的,然后在 Visual Studio 2012 Ultimate 中继续。问题是在这个项目中,我有一些属性设置如下的控件:

    private string _Header = "";
    public string TextHeader
    {
        get { return _Header; }
        set
        {
            _Header = value;
            if (_Header == string.Empty)
            {
                lTitle.Visibility = Visibility.Hidden;
                iSeparator.Visibility = Visibility.Hidden;
            }
            else
            {
                lTitle.Content = _Header;
                lTitle.Visibility = Visibility.Visible;
                iSeparator.Visibility = Visibility.Visible;
            }
        }
    }

我在 VS 2012 的 XAML 设计器中没有问题,现在,在这个版本的 Visual Studio (2015) 中,我无法使用设计器,它会抛出错误“无法识别或无法识别” 't access member "TextHeader"".

我没有调试问题,应用程序运行没有问题,没有异常,使用这些属性的控件也没有问题,我认为这是 XAML 设计器的问题。

我的项目Framework版本是3.5,目标平台是x64。

【问题讨论】:

    标签: c# wpf xaml visual-studio-2015


    【解决方案1】:

    应首先注册要通过 XAML 设置的属性。因此,在您的情况下,代码应该是:

    public static readonly DependencyProperty TextHeaderProperty = DependencyProperty.Register("TextHeader", typeof(string), typeof(StyledPanel))
    
    public string TextHeader
    {
        get { return (string)GetValue(TextHeaderProperty); }
        set { SetValue(TextHeaderProperty, value); }
    }
    

    This 文章很好地解释了 DependencyProperties。

    请注意,在此更改之后,您应该重新构建您的应用程序。

    编辑

    回调:

        public static readonly DependencyProperty TextHeaderProperty = DependencyProperty.Register(
            "TextHeader", 
            typeof(string), 
            typeof(StyledPanel), 
            new PropertyMetadata(TextHeaderPropertyChanged));
    
        private static void TextHeaderPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var instance = sender as StyledPanel;
            if (String.IsNullOrEmpty(instance.TextHeader))
            {
                instance.lTitle.Visibility = Visibility.Hidden;
                instance.iSeparator.Visibility = Visibility.Hidden;
            }
            else
            {
                instance.lTitle.Content = _Header;
                instance.lTitle.Visibility = Visibility.Visible;
                instance.iSeparator.Visibility = Visibility.Visible;
            }
        }
    

    希望对你有帮助

    【讨论】:

    • 它与设计器配合得很好,但是我在哪里添加逻辑'if (_Header == string.Empty)...'?我尝试了值更改回调,但方法必须是静态的,并且标签不是静态的。 WPF 中的那些依赖真的很难理解!
    • 依赖属性仅在支持 Binding 等场景时才需要;您当然仍然可以使用 XAML 设置普通属性。
    • @DanBryant,不能保证该主题的作者不会使用绑定或其他东西 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多