2010-03-12 13 views

Respuesta

22

La única solución que conozco es la creación de una propiedad estática sitio como este:

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

A continuación, utilizarlo en XAML como esto:

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

XAML no tiene nada por el compilador banderas.

+0

Utilicé un convertidor, pero esto es mucho más eficiente – pjdupreez

+0

si el enlace a System.Diagnostics.Debugger.IsAttached es adecuado para lo que está buscando, vea 2 respuestas a continuación – DanW

2

Hasta donde sé, no hay forma de utilizar las constantes de configuración (depuración, versión) de XAML.
Así que lo mejor que puede obtener es vincular la propiedad Visibilidad de los botones a una propiedad Debug en su contexto de datos. Pero establecer esa propiedad aún requeriría algún código.

+0

Tal vez un elemento personalizado o atributo? Soy bastante nuevo en WPF, así que no tomes en serio esta "idea". – naeron84

0

No está seguro de cuál es la diferencia entre este y el enfoque de Steven, pero usa su propiedad como una propiedad no estáticos en una clase no estática, y se hace referencia como si fuera tal:

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

Esto mostrará cuando el depurador está conectado. En primer lugar, establece el espacio de nombres:

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

continuación, establezca su recurso:

<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/> 

continuación, utilice el enlace:

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

Sobre la base de Steven respuesta ... Se puede utilizar una estática clase y declarar la visibilidad una sola vez.

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> 
Cuestiones relacionadas