Ho alcuni utili pulsanti wpf per testare alcune funzionalità. Sarebbe bene non mostrarli in versione ma in effetti debug.Controllo show WPF solo in modalità debug
Facendolo dal codice è facile. Ma preferirei una soluzione dichiarativa.
Ho alcuni utili pulsanti wpf per testare alcune funzionalità. Sarebbe bene non mostrarli in versione ma in effetti debug.Controllo show WPF solo in modalità debug
Facendolo dal codice è facile. Ma preferirei una soluzione dichiarativa.
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.
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.
Forse un elemento personalizzato o attributo? Sono abbastanza nuovo per WPF quindi non prendere sul serio questa "idea". – naeron84
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}" />
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}}" />
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>
Ho usato un convertitore, ma questo è molto più efficiente – pjdupreez
se il collegamento a System.Diagnostics.Debugger.IsAttached è adeguato per quello che stai cercando, vedere 2 risposte sotto – DanW