2009-07-31 3 views

답변

22

conditional compilation in XAML에 대한 일부 지원이 있습니다. 그것은 C#, 코드에서와 같지 않습니다. 트릭은 AlternateContentRequires을 사용하고 플래그가 Ignorable 인 것에 대해 사용하는 것입니다. 이렇게하면 조건에 따라 xaml의 일부를 사용할 수 없게되고 실제로 켜거나 끌 수 있습니다.

+8

리드, 적어도 관련 코드/정보를 게시 할 수 있습니까? 대답에는 * 단지 * 링크가 없어야합니다. – NullUserException

+0

동의합니다. 링크가 어떻게 유용했는지 이해하는 데 문제가있었습니다. –

+0

링크가 끊어졌습니다. –

1

Visual Studio에서 많은 오류를 줄지 만 컴파일 및 작동하지만 다른 솔루션은 UI 스레드에서 많은 시간을 사용하는 것처럼 보입니다. 좋아해.

대신 구현 한 최선의 해결책은 컨트롤의 코드 뒤에 모든 조건부 로직을 넣는 것입니다. 당신이 당신의 의도를 언급하지 않았 으면, 이것은 당신이 찾고 있었던 것일 수도 있습니다.

내 응용 프로그램의 색상에 조건부 컴파일 기호가 영향을 주길 원하지만 다른 다른 스타일이나 템플릿에도 동일한 해결책을 사용하거나 일반적인 if-else 논리와 함께 사용할 수 있다고 상상해보십시오. 컴파일 기호 중.

<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}" /> 
이에 대한 수동으로 응용 프로그램에서 MainStyle.xaml.cs을 배치하고 같이 사용에 의해 생성 될 수있는 코드 숨김 :

주의 할
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 
     } 
    } 
} 

중요한 것입니다 내 XAML 코드에서 설정되지 않은 값만 참조하고이 경우에도 StaticResource에 대해 작동하지만 생성자는 한 번만 호출됩니다. 덮어 쓰기/더 많은 리소스 사전을 사용하는 방법도 효과가있을 것이라고 생각합니다. 그러나 이미 시도 했으므로 문제가 해결되었습니다.