8

我在VS2010中有一個項目使用XAML,現在我需要將它加載到Expression Blend 4中。該項目在VS2010中生成並運行,這是第一個它已被加載到Blend中。即使成員不被識別,它也可以在Blend中構建和運行。將VS2010項目加載到Expression Blend時,屬性未被識別或無法訪問錯誤

爲什麼Scale屬性無法識別,爲什麼它在功能上工作時顯示爲錯誤?

EDIT雖然這樣構建並運行,但XAML不會在Blend中以圖形方式顯示,因此無法由非技術用戶修改。

在一些包含對用戶控件引用的.xaml文件的存在是不被混合與錯誤識別的屬性:

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 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文件I有此:

<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> 

回答

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更在Configuration Manager運行的事實所迷惑。您必須手動編輯.csproj文件。

+0

此設置與上述錯誤無關。我的項目默認情況下在.csproj文件中有AnyCPU,並且我仍然面臨這個錯誤:) – balint 2012-07-10 13:08:58

+0

是啊這與什麼有什麼關係? – 2012-09-09 16:55:59

+0

無事可做,這怎麼可能被標記爲答案 – 2012-12-01 01:30:43

0

我在Silverlight上遇到了同樣的問題,結果是我的用戶控件上的名稱空間太長了,我只是縮短了它的工作時間。希望能幫助到你!

0

我能夠重現/解決VS2012中的vb.net項目一致的問題。 在項目...屬性...編譯...目標CPU被設置爲AnyCPU(默認)。一切正常。

改變目標CPU到x64,保存並編譯

關閉並重新打開解決方案。

您現在獲得了「會員‘XXXX’無法識別或無法訪問」錯誤

改變目標CPU回任何CPU,保存並編譯

窗口現在正常顯示。

10

它們與更改平臺更改緩存程序集相關。接受的答案是不可接受的。

這是我的建議:

  1. 關閉所有文件
  2. 清潔液
  3. 重新生成解決方案

受影響的XAML現在應該清楚的構建錯誤的。

這適用於我,您的結果可能會有所不同。

0

我也有同樣的例外。我的問題是,該屬性的類型是在一個程序集中,這是沒有在項目中引用,我使用UserControl。

1

將項目的構建屬性更改爲'任何CPU'爲我解決了這個問題。我仍然無法理解這與問題有關。但它當然是有魔力的。

1

正如其他人所說,將目標從x64更改爲AnyCPU可以修復設計師的錯誤,看起來很奇怪。

我發現在Visual Studio論壇如下:

(Q)設計視圖是x64和ARM目標平臺不可用當文檔包含自定義元素(XAML與用戶控制,例如)。 (A)從Visual Studio 2015開始,我們使您能夠設計/創作您的XAML,即使您只針對x86而不是其他目標。 Visual Studio 2015 Update 2應該彙集一些修復和更改,以使這種體驗更好地工作。

但值得注意的是,當項目只針對x86時,我們將無法執行任何可能在設計器中編寫的代碼。這是因爲x86進程(XAML設計人員)無法運行ARM或x64代碼。您應該能夠查看和編輯頁面上的所有XAML,並用替換替換任何自定義類型以儘可能地保留所見即所得的體驗(當您真正關心在設計器中運行代碼時切換到x86)。

相關問題