c# شرح - هل يحتوي XAML على توجيه مترجم شرطي لوضع التصحيح؟




2 Answers

لقد اضطررت إلى القيام بذلك مؤخرًا وفاجأني بمدى بساطته عندما لم أتمكن من العثور على أي أمثلة واضحة. ما قمت به هو إضافة ما يلي إلى AssemblyInfo.cs:

#if DEBUG
[assembly: XmlnsDefinition( "debug-mode", "Namespace" )]
#endif

بعد ذلك ، استخدم علامة AlternateContent لمساحة الاسم لملاءمة علامات التمييز لاختيار المحتوى الخاص بك بناءً على معنى تعريف مساحة الاسم:

<Window x:Class="Namespace.Class"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="debug-mode"

        Width="400" Height="400">

        ...

        <mc:AlternateContent>
            <mc:Choice Requires="d">
                <Style TargetType="{x:Type ToolTip}">
                    <Setter Property="FontFamily" Value="Arial"/>
                    <Setter Property="FlowDirection" Value="LeftToRight"/>
                </Style>
            </mc:Choice>
            <mc:Fallback>
                <Style TargetType="{x:Type ToolTip}">
                    <Setter Property="FontFamily" Value="Tahoma"/>
                    <Setter Property="FlowDirection" Value="RightToLeft"/>
                </Style>
            </mc:Fallback>
        </mc:AlternateContent>

        ...
</Window>

الآن ، عندما يتم تعريف DEBUG ، سيتم تعريف "وضع التصحيح" أيضاً ، وستكون مساحة الاسم "d" موجودة. هذا يجعل علامة AlternateContent تختار الكتلة الأولى من التعليمات البرمجية. إذا لم يتم تعريف DEBUG ، سيتم استخدام كتلة التراجع عن التعليمات البرمجية.

لم يتم اختبار نموذج التعليمة البرمجية هذا ، ولكنه في الأساس نفس الشيء الذي أستخدمه في مشروعي الحالي لعرض بعض أزرار التصحيح بشكل مشروط.

لقد رأيت مشاركة مدونة تحتوي على بعض أمثلة التعليمات البرمجية التي اعتمدت على علامة "Ignorable" ، ولكن بدا ذلك أقل وضوحًا وسهولة في الاستخدام مثل هذه الطريقة.

wpf tutorial

أحتاج إلى شيء من هذا القبيل للأنماط في 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>



هذا غير ممكن في WPF / Silverlight / WP7.

على ملاحظة مثيرة للاهتمام ، فإن وثيقة المعايير ISO / IEC 29500 تغطي كيفية معالجة ذلك في مستند XML ، و XAML يدعم أحد العناصر من تلك المواصفات mc:Ignorable الذي يسمح لنا بفعل أشياء مثل:

<Page xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:c="Comments"
      mc:Ignorable="c">
    <Button Content="Some Text"
            c:Content="Some other text" />
</Page>

للتعليق على السمات. أعتقد أنه سيكون من الرائع إذا دعم XAML يومًا ما بقية المواصفات التي تسمح بتحميل محتوى بديل.

يتم استخدام السمة mc:Ignorable قبل Blend لدعم وظيفة وقت التصميم.




Related

c# wpf xaml

Tags

c#   wpf   xaml