Пользовательский элемент управления ComboBox внутри другого пользовательского элемента управления ComboBox, как связать элементы? - PullRequest
0 голосов
/ 20 января 2010

Я создал два пользовательских элемента управления ComboBox, оба наследуют от элемента управления ComboBox по умолчанию:

public BlueComboBox : ComboBox {}
public WhiteComboBox : ComboBox {}

BlueComboBox содержит шаблон, правильно оформлен и работает отлично. WhiteComboBox немного сложнее. Он содержит шаблон, состоящий из TextBlock и BlueComboBox.

Неверный фрагмент, но вы должны понять:

<ControlTemplate>
  <Grid>
    <TextBlock />
    <BlueComboBox />
  </Grid>
</ControlTemplate>

Вот хитрая часть: поскольку WhiteComboBox - это элемент управления ComboBox, я бы хотел связать элементы в BlueComboBox с элементами, установленными в моем WhiteComboBox элементе управления.

<WhiteComboBox>
  <ComboBoxItem Content="Foo" />
  <ComboBoxItem Content="Bar" />
</WhiteComboBox>

Я пытался связать ItemSource сущности BlueComboBox, использованной в шаблоне, со свойством ItemsSource моего WhiteComboBox, но это не сработало:

<ControlTemplate>
  <Grid>
    <TextBlock />
    <BlueComboBox ItemsSource="{TemplateBinding ItemsSource}" />
  </Grid>
</ControlTemplate>

Как правильно использовать элементы, определенные в моем экземпляре WhiteComboBox, для экземпляра BlueComboBox? Я неправильно использую свойство ItemsSource или мне следует использовать другое?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 22 января 2010

Есть вторая проблема, с которой я столкнулся.

Я стилизовал свойство ItemContainerStyle и установил значение SystemColors.HighlightBrushKey. Когда я использую BlueComboBox сам по себе, это прекрасно работает, когда я наводю курсор мыши на элемент. Однако, когда я встраиваю свой BlueComboBox в свой новый элемент управления, это больше не работает, когда я использую привязку шаблона ItemsSource. Когда я непосредственно добавляю некоторые элементы ComboBoxItems в шаблоне элемента управления в элемент BlueComboBox, он снова работает. Это также работает, когда я явно нажимаю на элемент.

Я попытался установить свойство ItemContainerStyle в моем шаблоне элемента управления WhiteComboBox и передать его вниз, но, похоже, ничего из того, что я пробовал, не помогло.

0 голосов
/ 20 января 2010

Вы можете попробовать использовать привязку RelativeSource:

<ControlTemplate>
  <Grid>
    <TextBlock />
    <BlueComboBox ItemSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}, Path=Items}" />
  </Grid>
</ControlTemplate>

Кроме того, обычной практикой в ​​WPF является использование стилей для изменения визуальных аспектов элементов управления, а не создание производных типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...