En Winforms vous pouvez direY a-t-il une propriété DesignMode dans WPF?
if (DesignMode)
{
// Do something that only happens on Design mode
}
est là quelque chose comme ça dans WPF?
En Winforms vous pouvez direY a-t-il une propriété DesignMode dans WPF?
if (DesignMode)
{
// Do something that only happens on Design mode
}
est là quelque chose comme ça dans WPF?
En effet, il est:
System.ComponentModel.DesignerProperties.GetIsInDesignMode
Exemple:
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
public class MyUserControl : UserControl
{
public MyUserControl()
{
if (DesignerProperties.GetIsInDesignMode(this))
{
// Design-mode specific functionality
}
}
}
J'ai appliqué votre solution dans mon application mais cela ne fonctionne pas. Je l'ai demandé ici http://stackoverflow.com/questions/3987439/init-grid-row-height-doesnt-work. Si vous le souhaitez, rejoignez-nous et discutez-en. –
ce code ne fonctionne pas si le WPF est hébergé sur un WinForm. – serhio
@serhio Merci d'avoir signalé cela. Connaissez-vous une solution de contournement? Btw il semble que cela ne fonctionne pas non plus dans Silverlight: http://connect.microsoft.com/VisualStudio/feedback/details/371837/designerproperties-getisindesignmode-doesnt-work-with-silverlight-pages –
Dans certains cas, je dois savoir, si un appel à ma classe non-UI est initiée par le concepteur (comme si je créais une classe DataContext à partir de XAML). Ensuite, l'approche from this MSDN article est utile:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
J'ai appliqué votre solution dans mon application mais cela ne fonctionne pas. Je l'ai demandé ici http://stackoverflow.com/questions/3987439/init-grid-row-height-doesnt-work. Si vous le souhaitez, rejoignez-nous et discutez-en. –
Pour toute WPF Controls hébergés dans WinForms, DesignerProperties.GetIsInDesignMode(this)
ne fonctionne pas.
Alors, j'ai créé a bug in Microsoft Connect et a ajouté une solution de contournement:
public static bool IsInDesignMode()
{
if (System.Reflection.Assembly.GetExecutingAssembly().Location.Contains("VisualStudio"))
{
return true;
}
return false;
}
Cela ne devrait-il pas être 'GetEntryAssembly()' au lieu de 'GetExecutingAssembly()'? Ce dernier doit renvoyer l'assembly dans lequel cette propriété est définie – fjch1997
Utilisez celui-ci:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(Async et opérations fichiers ne fonctionnera pas ici)
En outre, pour instancier un Objet au moment du design dans XAML (d est l'espace de nom du concepteur spécial)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Cette classe ('Windows.ApplicationModel') est destinée aux applications Store, incluses dans l'API Windows Runtime. Ce n'est pas une solution WPF prête à l'emploi si vous travaillez sur une application de bureau Windows standard. – qJake
réponse tardive, je sais - mais pour quelqu'un d'autre qui veut l'utiliser dans un DataTrigger
ou partout dans XAML en général:
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>
Notez que GetIsInDesignMode souffre de [le même bug énorme que la propriété DesignMode ] (http://stackoverflow.com/questions/34664/designmode-with-controls) –