WPF'de DesignMode özelliği var mı?


Yanıtlar:


153

Gerçekten de var :

System.ComponentModel.DesignerProperties.GetIsInDesignMode

Misal:

using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

public class MyUserControl : UserControl
{
    public MyUserControl()
    {
        if (DesignerProperties.GetIsInDesignMode(this))
        {
            // Design-mode specific functionality
        }
    }
}

Çözümünüzü başvuruma uyguladım ama çalışmıyor. Burada stackoverflow.com/questions/3987439/… diye sordum . Eğer isterseniz, lütfen bize katılın ve tartışın.
Nam G VU

@serhio Bunu belirttiğiniz için teşekkürler. Herhangi bir geçici çözümden haberdar mısınız? Ancak Silverlight'ta da çalışmıyor gibi görünüyor: connect.microsoft.com/VisualStudio/feedback/details/371837/…
Enrico Campidoglio 08

VS2019'da anahtar Enable project codeetkinleştirilmelidir (veya Menü-> Tasarım-> 🗹 Proje Kodunu Çalıştır).
marbel82

47

Bazı durumlarda, UI olmayan sınıfıma yapılan bir çağrının tasarımcı tarafından başlatılıp başlatılmadığını bilmem gerekir (örneğin, XAML'den bir DataContext sınıfı oluşturursam). O zaman bu MSDN makalesindeki yaklaşım faydalıdır:

// Check for design mode. 
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
{
    //in Design mode
}

Çözümünüzü başvuruma uyguladım ama çalışmıyor. Burada stackoverflow.com/questions/3987439/… diye sordum . Eğer isterseniz, lütfen bize katılın ve tartışın.
Nam G VU

20

Herhangi bir WPF Kontrolleri için WinForms barındırılan , DesignerProperties.GetIsInDesignMode(this)çalışma yapmaz.

Bu yüzden, Microsoft Connect'te bir hata oluşturdum ve bir geçici çözüm ekledim:

public static bool IsInDesignMode()
{
    if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
    {
        return true;
    }
    return false;
}

Bunun GetEntryAssembly()yerine olması gerekmiyor GetExecutingAssembly()mu? İkincisi, bu özelliğin tanımlandığı derlemeyi iade etmelidir
fjch1997

7

Geç cevap, biliyorum - ama bunu DataTriggergenel olarak XAML içinde veya herhangi bir yerde kullanmak isteyen herkes için :

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

Bunu kullan:

if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
    //design only code here
}

(Zaman uyumsuz ve Dosya işlemleri burada çalışmayacak)

Ayrıca, XAML'de bir tasarım zamanı nesnesini başlatmak için (d, özel tasarımcı ad alanıdır)

<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>

Bu sınıf ( Windows.ApplicationModel), Windows Runtime API'ye dahil olan Mağaza uygulamaları içindir. Yalnızca normal bir Windows masaüstü uygulaması üzerinde çalışıyorsanız, bu kullanıma hazır bir WPF çözümü değildir.
qJake
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.