3

特定のプロパティを設計時にマークするための d:XYZ メソッドが本当に気に入っています。たとえば、Blend では表示されますが、プログラムが実際に実行されているときは表示されません。

d:の反対は? 私の目標は、2 つの異なる動作をすることです。1 つはデザイン モードで、もう 1 つは実際に実行しているときですか?

たとえば、「TestTest」は Blend に表示されますが、「productionTest」は実行時に表示されます

<TextBlock x:Name="FileText" 
           TextWrapping="Wrap" 
           d:Text="TestTest" 
           Text="productionTest" 
           HorizontalAlignment="Center"/>
4

3 に答える 3

4

dは単なる Blend XML 名前空間の名前です: xmlns:d="http://schemas.microsoft.com/expression/blend/2008". これは一般的な「オプション」ではなく、具体的な属性を持つ具体的な名前空間です: http://msdn.microsoft.com/en-us/library/ff602277(v=vs.95).aspx これは完全なリストであり、反対はありません。

于 2013-11-19T04:26:30.480 に答える
2

以下のクラスを使用できます

public class Design : MarkupExtension
{
    readonly object realValue;
    readonly object designValue;

    public Design(object realValue, object designValue)
    {
        this.realValue = realValue;
        this.designValue = designValue;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        var target = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
        if (target != null && target.TargetObject != null)
        {
            var obj = target.TargetObject as DependencyObject;
            if (obj != null && DesignerProperties.GetIsInDesignMode(obj))
                return designValue;
        }
        return realValue;
    }
}

このような

<TextBlock Text="{my:Design 'Real value', 'Design value'}" />

ただし、これにはまだ (小さな) パフォーマンスのオーバーヘッドがあります (これは d:XYZ のようにコンパイルから除外されないため)

于 2013-11-20T13:13:39.203 に答える