2012-02-07 3 views
1

Когда я создаю свое приложение с использованием конфигурации Release, я хочу установить свойство true, но в противном случае я хочу установить его на false. У меня есть кое-что, как следует в виду:Как связать с конфигурацией решения из XAML?

<Window Topmost="{Binding IsReleaseBuild}"> 

Обычно я бы просто использовать директивы препроцессора #if и #endif для проверки постоянной DEBUG, но это не возможно в XAML.

Каков наилучший способ справиться с этим?

Most likely Я могу создать значение, которое я могу связать в контексте данных. Однако я бы предпочел создать многоразовое решение.

Я мог бы просто использовать директивы препроцессора в коде за файлом, но мне было интересно, было ли более чистое решение.

ответ

1

Вы могли бы просто сделать что-то подобное; на основе решения в указанной вами ссылке.

public bool IsReleaseBuild 
{ 
    get { return MyStaticClass.IsAssemblyDebugBuild(Assembly.GetExecutingAssembly()); } 
} 

Если вы используете MVVM вы можете просто положить Property в вашем BaseClass и позволяют использовать его всеми View/ViewModels.

Это может выглядеть примерно так.

public class BaseViewModel : ObservableObject 
{ 
    public Boolean IsReleaseBuild 
    { 
     get 
     { 
      ... 
     } 
    } 
} 

я сделать что-то подобное, чтобы выяснить, если мое приложение в настоящее время в Visual Studio Design Mode:

public class BaseViewModel : ObservableObject 
{ 
    private static Nullable<Boolean> _isInDesignMode; 

    public Boolean IsInDesignMode 
    { 
     get 
     { 
      if (!_isInDesignMode.HasValue) 
      { 
       DependencyProperty property = DesignerProperties.IsInDesignModeProperty; 

       _isInDesignMode 
        = (bool)DependencyPropertyDescriptor 
            .FromProperty(property, typeof(FrameworkElement)) 
            .Metadata.DefaultValue; 
      } 

      return _isInDesignMode.Value; 
     } 
    } 
} 
1

Как насчет вложенного свойства?

public sealed class Solution 
{ 
    public static readonly DependencyProperty IsReleaseBuildProperty = 
     DependencyProperty.RegisterAttached(
     "IsReleaseBuild", 
     typeof(bool), 
     typeof(Solution), 
     new FrameworkPropertyMetadata(
#if DEBUG 
      false 
#else 
      true 
#endif 
      )); 

    public static bool GetIsReleaseBuild(DependencyObject source) 
    { 
     return (bool)source.GetValue(IsReleaseBuildProperty); 
    } 
} 

И в вашем XAML:

<Window Topmost="{Binding RelativeSource={RelativeSource Self} Path=util:Solution.IsReleaseBuild}" /> 
Смежные вопросы