gpt4 book ai didi

silverlight - 以编程方式为 Silverlight ComboBox 创建 ItemsPanelTemplate?

转载 作者:行者123 更新时间:2023-12-02 06:10:04 25 4
gpt4 key购买 nike

我正在尝试创建与组合框相关的混合行为。为了获得我想要的效果,ComboBox 的 ItemsPanel 必须添加特定的元素。我不想在每个使用该行为的 ComboBox 中都这样做,所以我希望 Behavior 能够以编程方式注入(inject) ItemsPanelTemplate。但是,我似乎无法找到一种方法来做到这一点。 ItemsPanelTemplate 似乎没有让我设置可视化树的属性/方法。 WPF ItemsPanelTemplate 有 VisualTree 但 Silverlight 没有。

基本上,此 XAML 的编程等效项是什么?

    <ComboBox>
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>

编辑:
好吧,显然这不是一个简单的问题,所以我开始悬赏,我将提供更多背景信息,以防有另一种方法可以解决这个问题。我想为 Silverlight ComoboBox 提供键盘支持。开箱即用,它只支持向上和向下箭头,但我也希望它能工作,以便当用户点击一个字母时,ComboBox 跳转到该字母的第一项,类似于 ComboBoxes 在浏览器或 Windows 应用程序中的工作方式.

我找到了 this blog post ,这让我半途而废。调整该行为代码,ComboBox 将根据字母输入更改选择。 但是,当 ComboBox 打开时它不起作用。其原因,根据this blog post是当 ComboBox 打开时,您现在正在与其 ItemsPanel 交互,而不是 ComboBox 本身。因此,根据该帖子,我实际上需要将 StackPanel 添加到 ItemsPanelTemplate 并订阅 StackPanel 的 KeyDown 事件,以便在打开 ComboBox 时采取行动。

这就是促使我提出如何将 StackPanel 放入 ComboBox 的 ItemsPanelTemplate 的问题的原因,从行为。如果那不可能,是否有其他方法可以让它发挥作用?是的,我知道我可以转到应用程序中的每个 ComboBox 并添加 StackPanel 和事件。但我想通过一种行为来做到这一点,这样我就不必修改应用程序中的每个组合框,这样我就可以跨应用程序重用这个逻辑。

AnthonyWJones 在下面使用 XamlReader 的回答让我有所收获,因为我可以创建 StackPanel 并将其放入模板中。但是,我需要能够以编程方式访问该 SP 才能订阅该事件。

最佳答案

这应该有效。我在下面展示了如何更改方向。您可以添加额外的 SetValue 调用来修改其他属性。

cb.ItemsPanel = new ItemsPanelTemplate();
var stackPanelFactory = new FrameworkElementFactory(typeof (StackPanel));
// Modify it like this:
stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
// Set the root of the template to the stack panel factory:
cb.ItemsPanel.VisualTree = stackPanelFactory;

您可以在本文中找到更多详细信息:http://www.codeproject.com/KB/WPF/codeVsXAML.aspx

关于silverlight - 以编程方式为 Silverlight ComboBox 创建 ItemsPanelTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com