對於我自己控制,我通常做類似:
<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,我沒有一個很好的解決方案。通常我會創建一個測試頁面來顯示我的控件,並允許我切換模板。在整合過程中,您將看到額外的視圖(無論是在您的應用程序中還是作爲單獨的應用程序),允許您根據需要創建和操作控件的實例。 GoToStateAction從Blend SDK定位的觸發器操作在這裏通常很有用。例如,爲每個可視狀態創建一個按鈕,然後使用Click甚至觸發到特定狀態的轉換。因此,您可以輕鬆測試所有狀態以及綁定到測試數據時的轉換。 Hacky並沒有真正設計時間數據,但它工作。
正如我所說'{Binding}'很容易因爲'd:DataContext',但我在'TemplateBinding}之後。 –
您是否嘗試過上述操作,但將d:DataContext分配爲樣式的一部分?對於這種情況,我沒有很好的解決方案:通常我會創建一個測試頁面來顯示我的控件,並允許我切換模板。哈克,但它的作品。 –
這似乎是合理的。必須自己嘗試。但是您必須更改集成版本的XAML,或者您也可以在那裏提供綁定? –