6

DataContextの設計時データを提供するのは簡単ですが、参照されている、または参照さd:DataContextれているコントロールプロパティについてはどうでしょうか。{TemplateBinding}{RelativeSource TemplatedParent}Style.Template

DesignerProperties.GetIsInDesignMode(this)trueが返されたときに、コンストラクター/ Loadedイベント内にサンプルデータをコントロールに入力する必要がありますか? (通常の設計経験を損なうため、これを行うことはできません)。

変更できないサードパーティのコントロールはどうですか?

4

1 に答える 1

5

私自身のコントロールのために、私は通常次のようなことをします:

<Style x:Key="FooStyle>
  <Setter Property="Template>
    <Setter.Value>
      <ControlTemplate TargetType="FooControl">
        <Grid d:DataContext="{d:DesignInstance FooDesignTimeData, IsDesignTimeCreatable=True}">
          ... guts of control template go here ...
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

ここで、「FooDesignTimeData」は、適切な形式で設計時データを提供するクラスです(ここでは、ランタイムビューモデルからインターフェイスを実装することをお勧めします)。

なぜこれがサードパーティのコントロールでも機能しないのかわかりません。コントロールを再テンプレート化する必要さえないかもしれません-スタイル内でサードパーティのコントロールを指定し、上記のようにデザイン時のデータコンテキストを与えるだけで回避できるかもしれませんが、私はそのシナリオを試していません。(Vendor.Controls.Design.dllやVendor.Controls.Expression.Designを提供するなどして)優れた設計時の経験がないコントロールを使用せざるを得ないため、このすべての問題が発生すると思います。 dllファイル)。

TemplateBindingsを操作するための優れたソリューションはありません。通常、コントロールを表示し、テンプレートを切り替えることができるテストページを作成します。統合中に、必要に応じてコントロールのインスタンスを作成および操作できる追加のビュー(アプリ内または別のアプリとして)が表示されます。ここでは、BlendSDKのGoToStateActionターゲットトリガーアクションが役立つことがよくあります。たとえば、視覚的な状態ごとにボタンを作成し、クリックイーブンを使用して特定の状態への遷移をトリガーします。したがって、テストデータにバインドされている間、すべての状態と遷移を簡単にテストできます。ハッキーで実際には設計時間データではありませんが、機能します。

于 2012-07-08T17:25:39.363 に答える