仅在调试模式下WPF显示控制
答
我所知道的唯一的解决办法是在某处建立一个静态属性是这样的:
public static Visibility IsDebug
{
#if DEBUG
get { return Visibility.Visible; }
#else
get { return Visibility.Collapsed; }
#endif
}
然后用它在XAML这样的:
<MyControl Visibility="{x:Static local:MyType.IsDebug}" />
XAML不具有任何编译标志。
答
据我所知,没有办法使用XAML的配置常量(Debug,Release)。
所以最好的办法是将按钮的Visibility属性绑定到datacontext上的Debug属性。但设置该属性仍然需要一些代码。
+0
也许自定义元素或属性?我对WPF很陌生,所以不要认真对待这个“主意”。 – naeron84 2010-03-12 16:21:16
答
不知道不同的是这和史蒂芬的做法之间有什么,但我用他的财产在非静态类的非静态属性,并引用它像这样:
<local:MyClass x:Key="MyClass" />
<MyControl Visibility="{Binding IsDebug, Source={StaticResource MyClass}, Mode=OneTime}" />
答
这将显示当调试器被连接时。 首先,设置命名空间:
xmlns:diag="clr-namespace:System.Diagnostics;assembly=mscorlib"
然后设置你的资源:
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
然后使用绑定:
<MenuItem Header="onlyIfDebuggerAttached" Visibility="{Binding Source={x:Static diag:Debugger.IsAttached}, Converter={StaticResource BoolToVisibilityConverter}}" />
答
基于史蒂芬答案...你可以使用静态类并仅声明一次可见性。
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>
我使用了一个转换器,但这样更有效率 – pjdupreez 2015-02-04 14:50:00
如果绑定到System.Diagnostics.Debugger.IsAttached足以满足您的要求,请参阅下面的2个答案 – DanW 2015-04-02 11:17:53