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.