Для моих собственных элементов управления я обычно делаю что-то вроде:
<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 часто полезно здесь. Например, создайте кнопку для каждого визуального состояния, а затем нажмите кнопку «Щелчок», чтобы вызвать переход в конкретное состояние. Таким образом, вы можете легко протестировать все свои состояния и переходы, привязанные к проверке данных. Хакки и не действительно разрабатывают временные данные, но это работает.
Как я уже сказал, '{Binding}' легко из-за 'd: DataContext', но я после' {TemplateBinding} 's. –
Вы пытались сделать выше, но назначили d: DataContext как часть стиля? У меня нет отличного решения для этой ситуации: обычно я создаю тестовую страницу, которая отображает мой элемент управления и позволяет мне менять шаблоны. Хакки, но это работает. –
Это кажется разумным. Придется попробовать это сам. Но вы должны изменить XAML для версии интеграции, или можете ли вы предоставить Binding там тоже? –