2009-07-31 19 views

Respuesta

22

Existe algún soporte para conditional compilation in XAML. Sin embargo, no es lo mismo que en el código C#. El truco es usar AlternateContent con Requires contra algo marcado Ignorable. Al hacer esto, puede tener porciones de su xaml no disponibles en función de las condiciones, y activar o desactivar.

+8

Reed, ¿podría publicar al menos algún código/información relevante? Las respuestas no deben contener * solo * un enlace. – NullUserException

+0

Estoy de acuerdo. Tenía problemas para entender cómo el enlace era útil. –

+0

El enlace ahora está roto. –

1

Probé la otra solución mencionada, y compila y funciona, aunque Visual Studio le dará un montón de errores, y para mí la solución parece usar mucho tiempo en el hilo de la interfaz de usuario, ambos de los cuales 'T como.

La mejor solución que implementé en su lugar fue que puse toda la lógica condicional en el código detrás del control. Como no mencionas tu intención, esto podría ser lo que estabas buscando.

Quería que un símbolo de compilación condicional afectara a los colores de mi aplicación, pero también se puede imaginar la misma solución para otros estilos o incluso plantillas diferentes, o que puede usarse con la lógica if-else usual de símbolos de compilación.

<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}" /> 

El código subyacente de este manual se pueden crear mediante la colocación de un MainStyle.xaml.cs en su aplicación y utilizar de esta manera:

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

Es importante señalar que si solo referencia los valores no configurados de mi código XAML, y esto también funciona para StaticResource s, aunque al constructor solo se le llama una vez. Supongo que sobrescribir/usar más métodos de diccionarios de recursos también funcionaría, pero esto ya resolvió mi problema, así que no lo intenté.

Cuestiones relacionadas