Jawaban:
Memang ada :
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Contoh:
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
harus diaktifkan (atau Menu-> Desain-> 🗹 Jalankan Kode Proyek).
Dalam beberapa kasus saya perlu tahu, apakah panggilan ke kelas non-UI saya diprakarsai oleh perancang (seperti jika saya membuat kelas DataContext dari XAML). Maka pendekatan dari artikel MSDN ini sangat membantu:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Untuk Kontrol WPF apa pun yang dihosting di WinForms , DesignerProperties.GetIsInDesignMode(this)
tidak berfungsi.
Jadi, saya membuat bug di Microsoft Connect dan menambahkan solusi:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()
bukan GetExecutingAssembly()
? Yang terakhir harus mengembalikan perakitan di mana properti ini ditentukan
Jawaban terlambat, saya tahu - tetapi untuk siapa pun yang ingin menggunakan ini di DataTrigger
, atau di mana pun di XAML secara umum:
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>
Gunakan yang ini:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Operasi Async dan File tidak akan berfungsi di sini)
Juga, untuk membuat contoh objek waktu desain di XAML (d adalah namespace desainer khusus)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
) adalah untuk aplikasi Store, termasuk dalam Windows Runtime API. Ini bukan solusi WPF out-of-the-box jika Anda hanya bekerja pada aplikasi desktop Windows biasa.