WPF ControlTemplate частичная замена

Предположим, что у нас есть очень 'XAML долго' ControlTemplate для нашего Control. И мы хотим добавить всего 1 Кнопку к Шаблону. MSDN утверждает, что 'Нет никакого способа заменить только часть визуального дерева управления'. Я должен действительно скопировать весь, что ControlTemplate и добавляют мою Кнопку к нему?

Или: Есть ли возможность, как предоставить некоторый интерфейс определенному элементу? Например, TextBox, так, чтобы все могли легко обработать его по шаблону, не имея необходимость к reapeat целый ControlTemplate.

Спасибо!

8
задан PaN1C_Showt1Me 27 January 2010 в 15:03
поделиться

2 ответа

Как сказал Qntmfred, вы не можете сделать это напрямую. Однако, если у вас есть контроль, который вы хотите настроить (что звучит так, как вы делаете), то вы можете сделать это, добавив подходящие свойства настройки, такие как свойство Custombuttons (который каждый пользователь элемента управления может добавить свои собственные кнопки для ) или свойство ExtensionContent (которое каждый пользователь элемента управления может установить на любой момент, который они хотели, - оставьте его пустым, добавьте один элемент управления или добавить панель с таким же множеством вещей, как они хотели на нем). Ваша ControlTemplate не будет назначать семантики к этим свойствам, но просто разместите их, поскольку им было дано. Например, предположим, что вы предоставили свойство расширенногоContent. Ваша ControlTemplate может представлять это с помощью ContentPresenter:

<ContentPresenter ContentSource="ExtensionContent" />

и ваши пользователи могут поставить все, что они хотели в нем:

<s:StefansControl>
  <s:StefansControl.ExtensionContent>
    <StackPanel Orientation="Horizontal">
      <TextBlock Text="I'm custom content" />
      <Button Click="DoSomethingSurprising_Click">Click me</Button>
      <Image Source="something.jpg" />
    </StackPanel>
  </s:StefansControl.ExtensionContent>
</s:StefansControl>

Другой, возможно, это предоставить свойства стиля, которые вы применяете к частям вашего элемента управления, чтобы пользователи могли их стирать (включая изменения Шаблон , эта часть (только) контроля) без замены всего стиля / шаблона. Это своего рода ваша «интерфейс для определенного элемента» идеи E.G. Предоставьте свойство FOOBOXSTYLE, которое применяется к текстовому поле «FO».

Короче говоря, идея состоит в том, чтобы построить определенную меру «частичной заместимости» в базовый шаблон - будь то с использованием контента, стилей, шаблонов или комбинации этих. WPF не обеспечивает общего понятия «частичной замены», но вы можете предоставить свое собственное особое понятие прилагаемой частичной замене, вы можете предсказать, какие частичные замены могут потребоваться.

7
ответ дан 5 December 2019 в 21:19
поделиться

MSDN является правильным. Должен скопировать всю контрольную таблицу.

0
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: