c# - Visual Studio : Condition "if (InDesigner)"

标签 c# .net visual-studio visual-studio-2010

这个问题困扰了我很久: 如果 Visual Studio 设计器正在执行它,我是否可以有一个条件为真,否则为假?

例如 (WPF),我想使用特殊的 BoolToVisibilityConverter 将某些控件的可见性属性绑定(bind)到鼠标悬停在该控件上。我使用以下 XAML 代码执行此操作:

<Image Width="50" Height="50" Source="../Images/MB_0010_tasks.ico" Margin="12,133,133,12" MouseLeftButtonUp="Image_MouseLeftButtonUp" 
          Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=IsMouseOver, Converter={StaticResource __boolToVisibilityConverter}}" />

这会导致元素在 Visual Studio 的设计器 View 中不可见。有没有办法告诉转换器这样的事情:

#if DESIGNER
return Visibility.Visible;
#endif
return b ? Visibility.Visible : Visibility.Hidden;

最佳答案

您可以使用 System.ComponentModel.DesignerProperties.GetIsInDesignMode() 方法:

// In WPF:
var isDesign = DesignerProperties.GetIsInDesignMode(Application.Current.MainWindow);

// In Silverlight:
var isDesign = DesignerProperties.GetIsInDesignMode(Application.Current.RootVisual);

if(isDesign)
{
    // designer code
    return;
}

// non designer code

在 Blend 或 Visual Studio 中(我不确定是哪一个)这总是错误的,因此您还应该包括以下检查:

isDesign = isDesign || Application.Current.GetType().Equals(typeof(Application));

这是有效的,因为在运行程序中 Application.Current 将始终是您自己派生的 Application 类(默认情况下:App,在 App.xaml 和 App.xaml 中定义.cs 分别)

关于c# - Visual Studio : Condition "if (InDesigner)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000745/

相关文章:

visual-studio - 编译Qt 库与Visual Studio 2008 一起运行,为什么nmake 失败?

c# - 如何读取 WCF Web 服务中的 HTTP 请求 header ?

c# - 修改从 C# 传递给 DLL 的结构值

c# - 如何使用 C# 为 OData 查询中指定的每个过滤器获取一组键/值对?

c++ - 调用了错误版本的 vcbuild.exe

c++ - 可以使用cmake设置VC调试选项中的命令参数

C# RenderTargetBitmap 到 SoftwareBitmap

.net - 如何从 MTM 运行 Ranorex 自动化测试?

.net分层设计: return error code to forms indicating which controls have an error

C# 以 List 作为参数插入到 SQL 表中