83 votes

XAML a-t-il une directive de compilateur conditionnelle pour le mode débogage ?

J'ai besoin de quelque chose comme ça pour les styles en XAML :

 <Application.Resources>

#if DEBUG
    <Style TargetType="{x:Type ToolTip}">
        <Setter Property="FontFamily" Value="Arial"/>
        <Setter Property="FlowDirection" Value="LeftToRight"/>
    </Style>
#else
    <Style TargetType="{x:Type ToolTip}">
        <Setter Property="FontFamily" Value="Tahoma"/>
        <Setter Property="FlowDirection" Value="RightToLeft"/>
    </Style>
#endif

</Application.Resources>

2voto

Josh C. Points 1919

Vous pouvez utiliser un sélecteur de modèle. La classe DataTemplateSelector est quelque chose que vous codez. Avec la méthode de sélection de modèle que vous remplacez, vous pouvez mettre vos directives de préprocesseur.

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

0voto

Dallin Beuller Points 31

J'ai l'impression que les réponses données ne sont pas les plus faciles à utiliser. Voici ma solution utilisant une propriété de dépendance attachable personnalisée :

 using namespace Utility{
    public static class DebugVisibility
    {
        public static readonly DependencyProperty IsVisibleProperty = DependencyProperty.RegisterAttached(
    "Debug", typeof(bool?), typeof(DebugVisibility), new PropertyMetadata(default(bool?), IsVisibleChangedCallback));

        private static void IsVisibleChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var fe = d as FrameworkElement;
            if (fe == null)
                return;
#if DEBUG
            fe.Visibility = Visibility.Visible;
#else
            fe.Visibility = Visibility.Collapsed;
#endif
        }

        public static void SetIsVisible(DependencyObject element, bool? value)
        {
            element.SetValue(IsVisibleProperty, value);
        }

        public static bool? GetIsVisible(DependencyObject element)
        {
            return (bool?)element.GetValue(IsVisibleProperty);
        }
    }
}

et le xaml serait utilisé comme ceci :

 <window ... xmlns:Util="clr-namespace:MyNamespace.Utility" >
    <Label Util:DebugVisibility.IsVisible="True">
</window>

Je l'ai gardé comme un booléen au cas où vous voudriez y ajouter une autre logique de visibilité. Il s'agit d'une belle bascule simple qui peut être liée et attachée à n'importe quel contrôle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X