WPF仅在调试模式下显示控件

时间:2010-03-12 09:29:32

标签: .net wpf

我有一些有用的wpf按钮来测试一些功能。最好不要在发布中显示它们,而是在调试中显示它们。

从代码中执行此操作非常简单。但我更喜欢声明性的解决方案。

5 个答案:

答案 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}" />
相关问题