我有一些有用的wpf按钮来测试一些功能。最好不要在发布中显示它们,而是在调试中显示它们。
从代码中执行此操作非常简单。但我更喜欢声明性的解决方案。
答案 0 :(得分:24)
我所知道的唯一解决方案是在这样的地方创建一个静态属性:
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没有任何编译器标志。
答案 1 :(得分:8)
这将显示附加调试器的时间。 首先,设置命名空间:
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}}" />
答案 2 :(得分:2)
据我所知,没有办法使用XAML的配置常量(Debug,Release) 因此,您可以获得的最佳方法是将按钮的Visibility属性绑定到datacontext上的Debug属性。但是设置该属性仍然需要一些代码。
答案 3 :(得分:1)
基于Steven回答...您可以使用静态类并仅声明一次可见性。
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>
答案 4 :(得分:0)
不确定这与Steven的方法有什么区别,但我在非静态类中使用了他的属性作为非静态属性,并像这样引用它:
<local:MyClass x:Key="MyClass" />
<MyControl Visibility="{Binding IsDebug, Source={StaticResource MyClass}, Mode=OneTime}" />