将VS2010项目加载到Expression Blend时,属性无法识别或无法访问错误

时间:2012-04-13 18:23:36

标签: wpf visual-studio visual-studio-2010 expression-blend expression-blend-4

我在VS2010中有一个使用XAML的项目,现在我需要将它加载到Expression Blend 4中。该项目在VS2010中构建并运行,这是第一次加载到Blend中。即使成员不被识别,它也可以在Blend中构建和运行。

为什么Scale属性无法识别,为什么它在功能上有效时会显示为错误?

编辑虽然这会构建并运行,但XAML不会在Blend中以图形方式显示,因此无法由非技术用户修改。

在包含对usercontrols的引用的许多.xaml文件中,Blend无法识别出错误的属性:

The member "XXXX" is not recognized or is not accessible

该属性存在于.cs代码隐藏文件中,并且在每种情况下错误消息都是相同的。

我在互联网上看了很多可能的答案,但没有一个是解决方案。引用的项目不是只读的。各种类和属性都是公共的。我还将以下WPF引用添加到.csproj文件中,该文件丢失了。

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

在以下代码中,即使Scale属性作为用户控件中的属性存在,也无法识别它。

以下是MyLogo.xaml中的UserControl:

<UserControl x:Class="NamespaceX.NamespaceY.UI.Shapes.MyLogo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="132" Width="105">
<Canvas>
    <Canvas.LayoutTransform>
        <ScaleTransform x:Name="st" CenterX="0" CenterY="0" />
    </Canvas.LayoutTransform>
    <Image Source="/Client;component/Images/MyLogo.png"/>
</Canvas>

以下是MyLogo.xaml.cs中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace NamespaceX.NamespaceY.UI.Shapes
{
/// <summary>
/// Interaction logic for MyLogo.xaml
/// </summary>
public partial class MyLogo : UserControl
{
    public double Scale
    {
        get
        {
            return st.ScaleX;
        }
        set
        {
            st.ScaleX = value;
            st.ScaleY = value;
        }
    }

    public MyLogo()
    {
        InitializeComponent();
    }
}
}

在我的Navigation.xaml文件中,我有:

<UserControl x:Class="NamespaceX.NamespaceY.UI.UserControls.Navigation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shape="clr-namespace:NamespaceX.NamespaceY.UI.Shapes"    
Height="185" Width="1280" Loaded="UserControl_Loaded">
<FrameworkElement.Resources>
    <ResourceDictionary Source="../Resources/Main.xaml" />
</FrameworkElement.Resources>
<Canvas>
    <shape:MyLogo Scale="1.2" Height="181.483" Canvas.Left="38" Canvas.Top="4" Width="188" />
    <StackPanel Canvas.Left="205" Canvas.Top="-2" Width="1062">

    </StackPanel>
</Canvas>

7 个答案:

答案 0 :(得分:17)

这是解决方案。在应用程序的.csproj文件中,更改此:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>

到此:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

不要被Visual Studio在配置管理器中报告您在AnyCPU中运行的事实所迷惑。您必须手动编辑.csproj文件。

答案 1 :(得分:10)

它们与更改平台更改缓存程序集的事实有关。接受的答案是不可接受的。

这是我的建议:

  1. 关闭所有文件
  2. 清洁解决方案
  3. 重建解决方案
  4. 受影响的XAML现在应该没有构建错误。

    这适用于我,您的结果可能会有所不同。

答案 2 :(得分:1)

将项目的构建属性更改为“任何CPU”为我解决了问题。我仍然无法理解这与问题有何关系。但当然它真的很神奇。

答案 3 :(得分:1)

正如其他人所说,将目标从x64更改为AnyCPU会修复设计器中的错误,这看起来很奇怪。

我在Visual Studio论坛上找到了以下内容:

(Q)当文档包含自定义元素(例如,带有用户控件的XAML)时,x64和ARM目标平台的设计视图不可用。

(A)从Visual Studio 2015开始,即使你定位的是x86以外的任何东西,我们也能让你设计/编写你的XAML。 Visual Studio 2015 Update 2应该汇集几个修复和更改,以使这种体验更好地工作。

但是,值得注意的是,当项目针对除x86之外的任何内容时,我们将无法执行您在设计器中编写的任何代码。这是因为x86进程(XAML设计器所在)无法运行ARM或x64代码。您应该能够查看和编辑页面上的所有XAML,并将任何自定义类型替换为替换,以尽可能地保留WYSIWYG体验(并在您真正关心在设计器中运行代码时切换到x86)。

答案 4 :(得分:0)

我在Silverlight上遇到同样的问题,结果是我的用户控件上的命名空间太长了,我只是缩短了它的工作原理。希望它有所帮助!

答案 5 :(得分:0)

我能够在VS2012中与vb.net项目一致地重现/修复此问题。 在Project ...属性...编译...目标CPU设置为AnyCPU(默认)。一切正常。

将目标CPU更改为x64,保存并生成

关闭并重新打开解决方案。

您现在获得&#34;会员&#34; XXXX&#34;未被识别或无法访问&#34;错误

将目标CPU更改回任何CPU,保存并生成

窗口现在可以正常显示。

答案 6 :(得分:0)

我也有同样的例外。我的问题是,属性的​​类型是在程序集中,在项目中没有引用,我使用UserControl。