C'è un modo semplice per usare lo stesso simbolo di compilazione condizionale che sto usando per il mio codice C#, nei miei file xaml?Compilazione condizionale XAML
risposta
C'è un po 'di supporto per conditional compilation in XAML. Tuttavia, non è lo stesso di C#, il codice. Il trucco è usare AlternateContent
con Requires
contro qualcosa contrassegnato Ignorable. In questo modo, puoi effettivamente avere parti del tuo xaml non disponibili in base alle condizioni e attivare o disattivare.
Ho provato l'altra soluzione citata, e si compila e funziona, anche se Visual Studio ti darà un sacco di errori, e per me la soluzione sembra impiegare molto tempo sul thread dell'interfaccia utente, entrambi i quali non Mi piace
La soluzione migliore che ho implementato invece era che inserivo tutta la logica condizionale nel codice dietro al controllo. Poiché non menzioni la tua intenzione, potrebbe essere quello che stavi cercando.
Volevo che un simbolo di compilazione condizionale influenzi i colori nella mia applicazione, ma puoi anche immaginare la stessa soluzione da utilizzare per altri stili differenti o anche modelli, o che questo possa essere usato con la logica if-else al solito di simboli di compilazione.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class ="MyApp.Style.MainStyle">
<!--Version1 -->
<Color x:Key="AbMainColor">#068C00</Color>
<Color x:Key="AbLighterMainColor">#5EBD50</Color>
<Color x:Key="AbDarkerMainColor">DarkGreen</Color>
<Color x:Key="MainColor" />
<Color x:Key="LighterMainColor" />
<Color x:Key="DarkerMainColor" />
<!-- Version2 -->
<Color x:Key="OtherRedColor">#EF0000</Color>
<Color x:Key="LighterRedColor">#e62621</Color>
<Color x:Key="DarkerRedColor">#EF0000</Color>
<SolidColorBrush x:Key="MainBrush" Color="{DynamicResource MainColor}" />
<SolidColorBrush x:Key="LighterMainBrush" Color="{DynamicResource LighterMainColor}" />
<SolidColorBrush x:Key="DarkerMainBrush" Color="{DynamicResource DarkerMainColor}" />
Il code-behind per questo possono essere manualmente creato mettendo un MainStyle.xaml.cs nell'applicazione e usarlo in questo modo:
using System.Windows;
namespace MyApp.Style
{
partial class MainStyle : ResourceDictionary
{
public MainStyle()
{
InitializeComponent();
#if VERSION2
this["MainColor"] = this["OtherRedColor"];
this["LighterMainColor"] = this["LighterRedColor"];
this["DarkerMainColor"] = this["DarkerRedColor"];
#elif VERSION1
this["MainColor"] = this["AbMainColor"];
this["LighterMainColor"] = this["AbLighterMainColor"];
this["DarkerMainColor"] = this["AbDarkerMainColor"];
#endif
}
}
}
Importante da notare è che se si fa riferimento solo ai valori non impostati dal mio codice XAML e questo funziona anche per StaticResource
s, sebbene il costruttore venga chiamato una volta sola. Immagino che sovrascrivere/usare più metodi dei dizionari delle risorse funzionerebbe, ma questo ha già risolto il mio problema, quindi non ci ho provato.
- 1. XAML condizionale (WPF)
- 2. Associazione di testo condizionale XAML
- 3. Compilazione condizionale in Scala
- 4. Compilazione condizionale in Go
- 5. Compilazione Java condizionale
- 6. C++ compilazione condizionale
- 7. La compilazione condizionale non funziona
- 8. Compilazione condizionale di metodi generici
- 9. Come impostare una variabile di compilazione condizionale?
- 10. Alternative alla compilazione condizionale in C#
- 11. Compilazione condizionale quando si utilizza ARC
- 12. Errore di automazione con la compilazione condizionale
- 13. Simboli di compilazione condizionale non definiti
- 14. Domanda veloce sulla compilazione condizionale (ifndef)
- 15. Compilazione condizionale per armv6 e armv7
- 16. Compilazione condizionale all'interno di Literate Haskell
- 17. Convalida l'associazione dati in XAML in fase di compilazione
- 18. Uso dei simboli di compilazione condizionale in vista MVC
- 19. Come utilizzare la compilazione condizionale con `cfg` e Cargo?
- 20. Compilazione condizionale con ifndef e || non cattura il secondo caso
- 21. compilazione condizionale per test/distribuzione build con raspberry pi
- 22. Compilazione Condizionale simbolo per Net Nucleo Class Library
- 23. Compilazione condizionale in C++ basata sul sistema operativo
- 24. Visual Studio 2012: Come eseguire un evento post-compilazione condizionale
- 25. Come passare i simboli di compilazione condizionale (DefineConstants) a msbuild
- 26. ASP.NET - web.config condizionale
- 27. Scalac condizionale con SBT
- 28. XAML ha una direttiva del compilatore condizionale per la modalità di debug?
- 29. Utilizzo di XAML in WinForms
- 30. XAML Alternative
Reed, puoi pubblicare almeno qualche codice/informazioni rilevanti? Le risposte non dovrebbero contenere * solo * un link. – NullUserException
Sono d'accordo. Ho avuto problemi a capire come il collegamento fosse utile. –
Il link è ora rotto. –