XAML设计师无法识别其他控制属性(VS 2015)

时间:2015-09-17 20:55:51

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

我最近安装了Visual Studio 2015社区,我有一个最初在Visual Studio 2010中开发的大型WPF项目,然后继续在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)中,我无法使用设计器,它会抛出错误" 可以& #39;识别或无法访问该成员" TextHeader" "。

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

enter image description here

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

1 个答案:

答案 0 :(得分: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;
        }
    }

希望,这有帮助