2010-03-12 15 views

risposta

22

L'unica soluzione che conosco è quello di creare una proprietà statica posto come questo:

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

Quindi utilizzare in XAML come questo:

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

XAML non ha nulla per il compilatore bandiere.

+0

Ho usato un convertitore, ma questo è molto più efficiente – pjdupreez

+0

se il collegamento a System.Diagnostics.Debugger.IsAttached è adeguato per quello che stai cercando, vedere 2 risposte sotto – DanW

2

Per quanto ne so non c'è modo di utilizzare le costanti di configurazione (Debug, Release) da XAML.
Quindi il meglio che è possibile ottenere è associare la proprietà Visibility dei pulsanti a una proprietà Debug sul proprio datacontext. Ma l'impostazione di quella proprietà richiederebbe ancora del codice.

+0

Forse un elemento personalizzato o attributo? Sono abbastanza nuovo per WPF quindi non prendere sul serio questa "idea". – naeron84

0

Non so quale sia la differenza tra questo e l'approccio di Steven, ma ho usato la sua proprietà come una proprietà non-statico in una classe non statica, e fa riferimento è come tale:

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

Questo mostrerà quando il debugger è collegato. In primo luogo, impostare lo spazio dei nomi:

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

quindi impostare la vostra risorsa:

<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/> 

quindi utilizzare il legame:

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

Sulla base di Steven risposta ... È possibile utilizzare un statico classificare e dichiarare la visibilità una sola volta.

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> 
Problemi correlati