2012-01-25 34 views
6

Câu hỏi này gây lỗi cho tôi từ một thời gian dài: Tôi có thể có điều kiện đúng nếu nhà thiết kế Visual Studio đang thực hiện và sai khác không?Visual Studio: Điều kiện "if (InDesigner)"

Ví dụ (WPF), tôi muốn sử dụng một bộ chuyển đổi BoolToVisibilityConverter đặc biệt để ràng buộc thuộc tính hiển thị của một số điều khiển với con chuột nằm ngoài kiểm soát đó. Tôi thực hiện điều này bằng mã XAML sau:

<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}}" /> 

Điều này dẫn đến các thành phần không hiển thị trong chế độ xem thiết kế của Visual Studio. Có cách nào để nói với một cái gì đó chuyển đổi như thế này:

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

Trả lời

9

Bạn có thể sử dụng System.ComponentModel.DesignerProperties.GetIsInDesignMode() phương pháp:

// 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 

Trong cả hai chế độ hòa trộn hoặc Visual Studio (tôi không chắc chắn nó là cái nào), giá trị này sẽ luôn là sai, vì vậy bạn cũng nên bao gồm séc sau:

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

này hoạt động bởi vì trong chương trình đang chạy Application.Current sẽ luôn luôn được riêng lớp ứng dụng có nguồn gốc của bạn (theo mặc định: App, quy định tại App.xaml và App.xaml.cs tương ứng)

+0

trình như một nét duyên dáng, đặc biệt trong BoolToVisibilityConverters của tôi. Cảm ơn rất nhiều! – Akku

+0

+1! Cuối cùng, cái gì đó hoạt động! GetIsInDesignMode bắt đầu trả về false nhưng lần kiểm tra cuối cùng của bạn đã thực hiện thủ thuật, cảm ơn bạn! –

3

Đối với một ứng dụng WPF bạn có thể thử một cái gì đó như sau:

 if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
     { 
      // If we're here it's the design mode 
     } 
Các vấn đề liên quan