Câu trả lời:
Thật vậy có :
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Thí dụ:
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
public class MyUserControl : UserControl
{
public MyUserControl()
{
if (DesignerProperties.GetIsInDesignMode(this))
{
// Design-mode specific functionality
}
}
}
Enable project code
phải được bật (hoặc Menu-> Design-> 🗹 Run Project Code).
Trong một số trường hợp tôi cần biết, liệu một lệnh gọi đến lớp không phải UI của tôi có được khởi tạo bởi trình thiết kế hay không (như nếu tôi tạo một lớp DataContext từ XAML). Sau đó, cách tiếp cận từ bài viết MSDN này rất hữu ích:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Đối với bất kỳ Điều khiển WPF nào được lưu trữ trong WinForms , DesignerProperties.GetIsInDesignMode(this)
không hoạt động.
Vì vậy, tôi đã tạo một lỗi trong Microsoft Connect và thêm một cách giải quyết:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()
thay vì GetExecutingAssembly()
? Sau này nên được trả lại assembly mà tài sản này được định nghĩa
Câu trả lời muộn, tôi biết - nhưng đối với bất kỳ ai khác muốn sử dụng điều này trong một DataTrigger
hoặc bất kỳ đâu trong XAML nói chung:
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
Path=(componentModel:DesignerProperties.IsInDesignMode)}"
Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
Sử dụng cái này:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Các hoạt động không đồng bộ và tệp sẽ không hoạt động ở đây)
Ngoài ra, để khởi tạo một đối tượng thời gian thiết kế trong XAML (d là không gian tên của nhà thiết kế đặc biệt)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
) dành cho các ứng dụng Store, được bao gồm trong Windows Runtime API. Đây không phải là giải pháp WPF có sẵn nếu bạn chỉ đang làm việc trên một ứng dụng máy tính để bàn Windows thông thường.