【问题标题】:Manually selecting ListBoxItem手动选择 ListBoxItem
【发布时间】:2012-01-17 22:53:10
【问题描述】:

我需要能够在 Windows Phone 7 中手动选择 ListBox 项目。我的 ListBox 包含以下使用 WrapPanel 的样式

   <Style TargetType="ListBox">
                        <Setter Property="ItemsPanel">
                            <Setter.Value>
                                <ItemsPanelTemplate>
                                    <[WP7Panels:WrapPanel][2] />
                                </ItemsPanelTemplate>
                            </Setter.Value>
                        </Setter>
                        <Setter  Property="ScrollViewer.HorizontalScrollBarVisibility"  Value="Disabled"  />
                    </Style>

这样我就可以实现包裹效果了。

当我在 WPF 中执行此操作时,我订阅了 ListBox.ItemContainerGenerator.StatusChanged 事件。在这个事件的事件处理程序中,我使用了:

var obj = ListBox.ItemContainerGenerator.ContainerForItem(objInstance) 作为列表框项;如果(obj!= null){ obj.IsSelected=真; }

我尝试为 WP7 做同样的事情并注意到:

  1. ListBox.ItemContainerGenerator 不再公开 StatusChanged 事件。而是有一个 ItemsChanged 事件,所以我处理了这个。
  2. 但是,当我调用 ItemContainerGenerator.ContainerForitem(objInstance) 甚至 ItemContainerGenerator.ContainerFromIndex() 时,我总是得到 null。

补充一点,我已经在列表框中显示的类上覆盖了 GetHashCode 和 Equals。

请出主意。

【问题讨论】:

    标签: windows-phone-7 listboxitem


    【解决方案1】:

    我不确定这是否是最好的方法,但我会这样做:

    1) 创建一个继承 INotifyPropertyChanged 接口的类(您可以通过 google 轻松找到如何使用它)。将您放入该类的 ListBox 中的信息包装起来。

    2) 为该类创建 IsSelected 属性。

    3) 将类的 IsSelected 属性绑定到 ListBox 项的 IsSelected 属性。

    4) 现在您可以随时更改您创建的类的 IsSelected 属性,一切都会自行发生。

    【讨论】:

    • 好主意,谢谢。除非我这样做; ,XamlParser 抛出异常。
    • 如果您在 &lt;Style TargetType="ListBox"&gt; ... &lt;/Style&gt; 中这样做,它将无法正常工作,因为 IsSelected 不是 ListBox 的属性。您必须使用 ItemTemplates 在实际的 ListBox 中应用该属性。
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2012-04-10
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多