Apakah ada properti DesignMode di WPF?


Jawaban:


152

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

Saya menerapkan solusi Anda dalam aplikasi saya tetapi tidak berhasil. Saya menanyakannya di sini stackoverflow.com/questions/3987439/… . Jika Anda mau, silakan bergabung dengan kami dan berdiskusi.
Nam G VU

@serhio Terima kasih telah menunjukkan hal itu. Apakah Anda mengetahui adanya solusi? Btw tampaknya itu juga tidak berfungsi di Silverlight: connect.microsoft.com/VisualStudio/feedback/details/371837/…
Enrico Campidoglio

Dalam VS2019, sakelar Enable project codeharus diaktifkan (atau Menu-> Desain-> 🗹 Jalankan Kode Proyek).
marbel82

47

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
}

Saya menerapkan solusi Anda dalam aplikasi saya tetapi tidak berhasil. Saya menanyakannya di sini stackoverflow.com/questions/3987439/… . Jika Anda mau, silakan bergabung dengan kami dan berdiskusi.
Nam G VU

20

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;
}

Bukankah seharusnya GetEntryAssembly()bukan GetExecutingAssembly()? Yang terakhir harus mengembalikan perakitan di mana properti ini ditentukan
fjch1997

7

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>

0

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>

Kelas itu ( 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.
qJake
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.