2013-02-12 8 views
5

Sto lavorando a un progetto WPF VS 2012 Express (codice C# code-behind) e ricevo l'errore "È stato rilevato un loop nelle espressioni di proprietà". Ora, prima di continuare, so perché lo sto capendo - non sono sicuro di cosa fare al riguardo o se debba essere gestito anche perché, anche se compare nell'elenco degli errori ed è sottolineato in blu, il il programma si compila e funziona bene. Ho cercato su Google questo e ovviamente i risultati sono cambiati. La mia domanda è un in due parti ma in primo luogo, ecco il riassunto:È stato rilevato un loop nelle espressioni di proprietà

Il codice incriminato:

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"> 
<!-- setter properties --> 
</Style> 

Come si può vedere, si tratta di uno stile per Button che fa riferimento a Button, che è ciò che provoca il problema. La prima soluzione che ho letto coinvolto separare il codice in questo modo:

<Style x:Key="ButtonStyleToApply" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"> 
    <!-- setter properties --> 
</Style> 
<!-- and in another style dictionary, --> 
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyleToApply}"/> 

... e poi i due insiemi di stile andare in diversi dizionari. Ovviamente, questo non ha funzionato - VS ha ancora fiutato ciò che stavo facendo, ma è ancora compilato e funziona bene. Ora ecco un'altra soluzione alternativa:

"Sono stati apportati alcuni cambiamenti architetturali in XAML Designer in Visual Studio che ha regredito questo scenario. Lavoreremo per migliorare questa esperienza in futuro ma in questo momento è possibile risolvere questo problema con non definendo le risorse nell'oggetto Application (App.xaml) ma definendole nel documento locale (MainPage.xaml) "

Questo è stato pubblicato in una richiesta di supporto tecnico Here. (Connect.Microsoft.Com)

Ma mi fido delle mani sull'esperienza di ogni uomo. Cosa possono dirmi i miei colleghi programmatori? La mia domanda è un due parter. 1. Devo anche preoccuparmi di risolvere il problema se il programma è in fase di compilazione? E 2. Se sono a posto, c'è un modo per dire a VS di ignorarlo? So che ignorarlo da parte mia o VS è probabilmente considerato "cattiva pratica" ma oltre ...?

+0

solo per FYI: si prega di non includere i nomi dei tag nei titoli; il software si prende cura di questo per te. Vedi: http://meta.stackexchange.com/questions/130242/using-tags-in-question-titles –

+0

capito, grazie :) –

risposta

12

Non c'è niente di sbagliato nella sintassi che si sta utilizzando; è legale definire uno stile implicito basato su uno stile implicito esistente. L'esempio di codice che hai fornito funziona per me in VS 2010 senza lamentele, ma produce l'errore in questione in VS2012.

Dal momento che anche compila e funziona bene in entrambe le versioni, ho il sospetto che il problema sia con il supporto del progettista XAML VS 2012. Quanto è grande questo affare dipende da quanto ti basi sul rendering del designer per le tue viste WPF. Ad esempio, di solito nascondo la vista renderizzata e lavoro esclusivamente nella vista XAML. Se si utilizza questa funzione, è possibile notare che non tutte le proprietà vengono impostate correttamente in fase di progettazione. Naturalmente, dato che di solito i setter non hanno molto effetto fino al momento dell'esecuzione, non si noterà mai la differenza.

E, come giustamente sottolineato dalla tua domanda, anche Microsoft ha identificato questo come una regressione in VS2012, il che suggerisce fortemente che non si aspettano che l'errore si verifichi e che probabilmente risolverà il bug del progettista ad un certo punto in futuro .

+0

Questo è sicuramente quello che volevo sentire. Grazie per l'aiuto. –

Problemi correlati