Я пытаюсь создать поведение Blend, связанное с ComboBox. Чтобы получить желаемый эффект, в ItemsPanel ComboBox должен быть добавлен определенный элемент. Я не хочу делать это в каждом ComboBox, который использует поведение, поэтому я хочу, чтобы Поведение могло программно внедрять ItemsPanelTemplate. Тем не менее, я не могу найти способ сделать это. ItemsPanelTemplate, похоже, не имеет свойства / метода, который позволяет мне устанавливать визуальное дерево. WPF ItemsPanelTemplate имеет VisualTree, а Silverlight - нет.
В принципе, что является программным эквивалентом этого XAML?
<ComboBox>
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
Edit:
Хорошо, по-видимому, это не простой вопрос, поэтому я учредил награду и собираюсь дать дополнительную информацию на случай, если есть другой способ сделать это. Я хочу обеспечить поддержку клавиатуры для Silverlight ComoboBox. Из коробки он поддерживает только стрелки вверх и вниз, но я также хочу, чтобы он работал так, чтобы, когда пользователь нажимал на букву, ComboBox переходил к первому элементу этой буквы, подобно тому, как ComboBox работает в браузере или приложении Windows. .
Я нашел это сообщение в блоге , которое дало мне половину пути. Адаптируя этот код поведения, ComboBox будет изменять выбор в зависимости от ввода букв. Однако не работает при открытии ComboBox. Причина этого, согласно этого сообщения в блоге , заключается в том, что при открытии ComboBox вы теперь взаимодействуете с его ItemsPanel, а не с самим ComboBox. Таким образом, согласно этому посту, мне действительно нужно добавить StackPanel к ItemsPanelTemplate и подписаться на событие KeyDown StackPanel, чтобы действовать при открытии ComboBox.
Так вот что вызвало мой вопрос о том, как получить StackPanel в шаблон ItemsPanel ComboBox, из поведения . Если это невозможно, есть ли альтернативные способы заставить это работать? Да, я знаю, что могу перейти к каждому ComboBox в приложении и добавить StackPanel и событие. Но я хочу сделать это с помощью поведения, чтобы мне не приходилось изменять каждый ComboBox в приложении и чтобы я мог повторно использовать эту логику в приложениях.
Ответ AnthonyWJones, приведенный ниже с использованием XamlReader, частично помогает мне: я могу создать StackPanel и вставить его в шаблон. Тем не менее, я должен быть в состоянии добраться до этого SP программно, чтобы подписаться на событие.