这个问题困扰了我很久: 如果 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/