2010-03-12 2 views

답변

22

내가 아는 유일한 해결책은이 같은 곳 정적 속성을 만드는 것입니다

<MyControl Visibility="{x:Static local:MyType.IsDebug}" /> 

XAML은 컴파일러 아무것도하지 않습니다 플래그.

<local:MyClass x:Key="MyClass" /> 
<MyControl Visibility="{Binding IsDebug, Source={StaticResource MyClass}, Mode=OneTime}" /> 
+0

변환기를 사용했는데, System.Diagnostics.Debugger.IsAttached에 대한 바인딩이 적절한 경우 – pjdupreez

+0

보다 효율적입니다. 아래 2 답변을 참조하십시오. – DanW

2

내가 아는 한 XAML의 Configuration 상수 (Debug, Release)를 사용할 방법이 없습니다.
여러분이 얻을 수있는 최선의 방법은 버튼의 Visibility 속성을 datacontext의 Debug 속성에 바인딩하는 것입니다. 그러나 해당 속성을 설정하는 데는 여전히 일부 코드가 필요합니다. 그런 다음

public static Visibility IsDebug 
    { 
#if DEBUG 
     get { return Visibility.Visible; } 
#else 
     get { return Visibility.Collapsed; } 
#endif 
    } 

을 다음과 같이 XAML에서 사용 :

+0

아마 사용자 정의 요소 또는 속성? 저는 WPF에 대해 매우 익숙합니다. 따라서이 "아이디어"를 진지하게 생각하지 마십시오. – naeron84

0

확실하지 않음 디버거가 연결될 때.

<MenuItem Header="onlyIfDebuggerAttached" Visibility="{Binding Source={x:Static diag:Debugger.IsAttached}, Converter={StaticResource BoolToVisibilityConverter}}" /> 
5

이 표시됩니다 : 차이가이 스티븐의 접근 방식 사이,하지만 난이 아닌 정적 클래스의 비 정적 속성으로 자신의 재산을 사용, 등처럼 참조 무엇

1

스티븐의 답변에 따라 ... 당신은 정적을 사용할 수 있습니다

<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/> 

는 다음 바인딩을 사용

xmlns:diag="clr-namespace:System.Diagnostics;assembly=mscorlib" 

는 다음 자원을 설정 : 첫째, 네임 스페이스를 설정 클래스를 선언하고 가시성을 한 번만 선언하십시오.

using System.Windows; 

namespace HQ.Wpf.Util 
{ 
    /* Usage: 

     xmlns:wpfUtil="clr-namespace:HQ.Wpf.Util;assembly=WpfUtil" 

     <Button Name="CmdTest" Click="CmdTestOnClick" Visibility="{x:Static wpfUtil:DebugVisibility.DebugOnly}">Test</Button> 

    */ 

    public static class DebugVisibility 
    { 
     public static Visibility DebugOnly 
     { 
#if DEBUG 
      get { return Visibility.Visible; } 
#else 
      get { return Visibility.Collapsed; } 
#endif 
     } 

     public static Visibility ReleaseOnly 
     { 
#if DEBUG 
      get { return Visibility.Collapsed; } 
#else 
      get { return Visibility.Visible; } 
#endif 
     } 
    } 
} 

XAML :

<Button Name="CmdTest" Click="CmdTestOnClick" 
    Visibility="{x:Static wpfUtil:DebugVisibility.DebugOnly}">Test 
</Button>