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