【问题标题】:How to retrieve the controls inside the selected item from a listbox in WP如何从 WP 的列表框中检索所选项目内的控件
【发布时间】:2012-01-19 06:51:52
【问题描述】:

我现在面临着许多人在使用列表框时遇到的最常见的问题。虽然我在论坛上找到了很多答案,但似乎没有什么对我有用,否则我弄错了。 .

我已经通过代码创建了一个列表框。每个列表框项都有一个堆栈面板,其中有两个文本块。堆栈面板具有垂直方向。文本块的前景已设置为特定颜色。当一个项目被选中或单击时,它会移动到另一个页面,并在新页面关闭时返回到旧页面。

我的问题是,当单击列表框项目时,它不显示选择颜色,默认情况下,选择颜色是手机的强调色,然后再转到下一页。是不是因为在创建列表框时已经设置了文本块的颜色?

所以我尝试像这样通过 SelectionChanged() 将其设置为所选项目的前景

ListBoxItem selItem = (ListBoxItem)(listboxNotes.ItemContainerGenerator.ContainerFromIndex(listboxNotes.SelectedIndex));
selItem .Foreground = (SolidColorBrush)Application.Current.Resources["PhoneAccentBrush"];

但这不起作用,我认为它是因为项目内部有一个堆栈面板。

这需要怎么做?我需要检索堆栈面板内的文本块并设置前景吗?我没有在这里使用绑定。可视化树助手???

谢谢

阿尔法

【问题讨论】:

  • 我从未在 WP7 应用程序上看到选择/按下的颜色。您确定要针对该平台进行设计吗?
  • @willmel 是的。 .默认列表框具有按下的颜色。 .
  • 如果你想要一个“按下”状态,你应该看看 TiltEffect 。 windowsphonegeek.com/articles/…
  • @willmel 我应该担心吗? :(我见过应用程序。我创建的两个列表框中所选项目的前景都发生了变化。所以我认为这是默认行为:(
  • 您需要为 ListBox 的DataTemplate 发布 XAML。它强调颜色出现的默认行为。但它也被认为是糟糕的用户体验。

标签: windows-phone-7 listbox selecteditem


【解决方案1】:

通常,所选颜色在您正在导航的列表上不会改变。

根据我使用 android 的经验,WP7 上没有“选择器”背景。如果您正在寻找显示某些动作正在发生的炫酷 UI 效果,绝对推荐使用 TiltEffect,并且非常容易实现。

http://www.windowsphonegeek.com/articles/Silverlight-for-WP7-Toolkit-TiltEffect-in-depth

但是 - 如果您正在创建一个没有即时导航的应用程序,您可能需要一个“选定的”单元格颜色等。我附上了一张图片:

https://skydrive.live.com/redir.aspx?cid=ef08824b672fb5d8&resid=EF08824B672FB5D8!366&parid=EF08824B672FB5D8!343

如果您在此处注明,则按钮与列表中的选定项目相关 - 即用户可以根据所选项目执行 4 种不同的操作,(但他们必须先选择一个项目!)。

internal void SelectionChanged()
        {
    var item = (((ListBoxItem) _view.servers.SelectedItem).Content) as StackPanel;
                if (item != null)
                {
                    for (int i = 0; i < _view.servers.Items.Count; i++)
                    {
                        var val = (((ListBoxItem) _view.servers.Items[i]).Content) as StackPanel;
                        var tb = val.Children[0] as TextBlock;
                        var tb2 = val.Children[1] as TextBlock;
                        if (i == _view.servers.SelectedIndex)
                        {
                            tb.Foreground = tb2.Foreground = (SolidColorBrush) App.Current.Resources["PhoneAccentBrush"];
                        }
                        else


                       {
                                tb.Foreground = tb2.Foreground = (SolidColorBrush) //regular color here, b/c all these should no longer be selected
                            }

                        }
                    }
}

【讨论】:

  • 其实有一个选择器颜色。尝试使用标准列表框。
  • @ClausJørgensen 是的 - 但它的使用方式与在 Android 上不同。
  • @willmel 奇怪的是,当我单击一个项目时,我可以看到带有前景的文本块作为手机主题颜色。 :O
  • @willmel - 我认为你混淆了两种效果。选中的项目在被选中后更改了 foreground(文本)颜色,而不是处于按下状态。 OP指的是前者。
  • @willmel 我通过一些复杂的方法得到了它。但现在有一个选择:)我按照你的建议从选定项目中提取了堆栈面板,然后从中提取文本框并设置颜色;)
【解决方案2】:

ListItemContainer 将自动更改为 Foreground。要继承这一点,只需不要在 TextBlock 上指定颜色(或样式)。

【讨论】:

  • 是的。 .我意识到了。 .但是列表框中的项目根据一些数据设置为特定的颜色。我需要颜色设置。有什么方法可以让我指定选定的颜色?
猜你喜欢
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 2015-04-15
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多