8

Mam projekt w VS2010, który używa XAML, a teraz muszę go załadować do Expression Blend 4. Projekt jest budowany i działa w VS2010 i jest to pierwszy czas został załadowany do Blend. Kompiluje się i działa w Blend, mimo że członkowie nie są rozpoznawani.Błąd nierozpoznany lub niedostępny podczas ładowania projektu VS2010 do Expression Blend

Dlaczego właściwość Skala nie jest rozpoznawana i dlaczego pojawia się jako błąd, gdy działa poprawnie?

EDIT Mimo to buduje i działa, XAML nie jest graficznie w mieszance, a zatem nie mogą być modyfikowane przez użytkownika nietechnicznym.

W liczbie .xaml plików, które zawierają odnośniki do usercontrols jest atrybutem, który nie jest rozpoznawany przez połączenie z błędem:

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

Obiekt istnieje w kodzie .cs za akt oraz w w każdym przypadku komunikat o błędzie jest taki sam.

Spojrzałem na wiele możliwych odpowiedzi na to w Internecie, ale żaden z nich nie jest rozwiązaniem. Wskazane elementy nie są tylko do odczytu. Różne klasy i właściwości są publiczne. Dodałem także następującą referencję WPF do pliku .csproj, którego brakowało.

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

W poniższym kodzie atrybut Scale nie jest rozpoznawany, mimo że istnieje jako właściwość w formancie użytkownika.

Oto UserControl w 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> 

Oto kod w tyle 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(); 
    } 
} 
} 

w moim pliku Navigation.xaml I mieć to:

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

Odpowiedz

17

Oto rozwiązanie. W pliku .csproj aplikacji, zmień to:

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

do tego:

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

Nie daj się nabrać na fakt, że Visual Studio raportów, które są uruchomione w AnyCPU więcej w menedżerze konfiguracji. Musisz ręcznie edytować plik .csproj.

+0

To ustawienie nie ma nic wspólnego z powyższym błędem. Mój projekt ma AnyCPU domyślnie w pliku .csproj, i nadal napotykam ten błąd :) – balint

+0

Tak, co to ma z tym wszystkim wspólnego? –

+0

nie ma nic wspólnego, jak to może być oznaczone jako odpowiedź –

0

Miałem ten sam problem w Silverlight, okazało się, że to przestrzeń nazw, którą miałem na mojej kontroli użytkownika, była zbyt długa, po prostu ją skróciłem i działa. Mam nadzieję, że to pomoże!

0

Byłem w stanie odtworzyć/naprawić ten problem konsekwentnie z projektem vb.net w VS2012. W projekcie ... Właściwości ... Kompilacja ... Docelowy procesor jest ustawiony na AnyCPU (domyślny). Wszystko dziala.

Zmiana procesora docelowa do x64, zapisywać i zbudować

zamknięciu i ponownym otwarciu rozwiązanie.

teraz uzyskać „Element«XXXX»nie został rozpoznany lub nie jest dostępny” błąd

Zmiana procesora docelowa powrotem do Any CPU, Zapisz i zbudować

Okno wyświetla teraz poprawnie.

10

Związane są one z faktem, że zmiana platformy powoduje zmianę buforowanych złożeń. Przyjęta odpowiedź jest nie do zaakceptowania.

To co polecam:

  1. Zamknij wszystkie pliki
  2. Clean Rozwiązanie
  3. Rebuild rozwiązanie

dotknięte chorobą XAML powinna być wolna od błędów kompilacji.

To działa dla mnie, twoje wyniki mogą się różnić.

0

Miałem również ten sam wyjątek. Mój problem polegał na tym, że Typ właściwości był w zespole, do którego nie odwoływałem się w Projekcie, gdzie używam UserControl.

1

Zmiana właściwości kompilacji projektu na "Dowolny procesor" rozwiązała problem. Nadal nie mogę zrozumieć, w jaki sposób jest to związane z problemem. Ale oczywiście zrobiła to magia.

1

Jak powiedzieli inni, zmiana celu z x64 na AnyCPU naprawia błędy projektanta, co wydaje się dziwne.

znalazłem następujące operacje na Visual Studio Forum:

(Q) widok projektu jest niedostępne dla x64 i ARM platform docelowych, gdy dokument zawiera niestandardowe elementy (XAML z kontrolą użytkownika, na przykład).

(A) Począwszy od Visual Studio 2015, umożliwiamy projektowanie/authoring XAML, nawet jeśli kierujesz się wyłącznie na x86. Aktualizacja 2 programu Visual Studio 2015 powinna zebrać kilka poprawek i zmian, aby ta funkcjonalność działała jeszcze lepiej.

Warto jednak zauważyć, że nie będziemy w stanie wykonać żadnego kodu, który napisałeś w projektancie, gdy projekt jest kierowany na coś innego niż x86. Wynika to z ograniczenia, że ​​proces x86 (który jest projektantem XAML) nie może uruchomić kodu ARM lub x64. Powinieneś być w stanie przeglądać i edytować wszystkie XAML na stronie, z dowolnymi niestandardowymi typami zastąpionymi zamiennikami, aby zachować maksymalnie WYSIWYG (i przełącz się na x86, kiedy naprawdę zależy Ci na uruchomieniu kodu w projektancie).

Powiązane problemy