Windows phone 7 如何从WP中的列表框中检索选定项内的控件

Windows phone 7 如何从WP中的列表框中检索选定项内的控件,windows-phone-7,listbox,selecteditem,Windows Phone 7,Listbox,Selecteditem,我现在面临的是我的许多人在使用列表框时遇到的最常见的问题。虽然我在论坛上找到了很多答案,但似乎没有什么对我有用,否则我就错了 我已经通过代码创建了一个列表框。每个listbox项都有一个stackpanel,其中有两个文本块。stackpanel具有垂直方向。文本块的前景已设置为特定颜色。选择或单击某个项目后,该项目将移动到另一个页面,在新页面关闭时,它将返回到旧页面 我的问题是,当单击列表框项目时,它在移动到下一页之前不会显示选择颜色(默认情况下为手机的强调色)。是因为在创建列表框时文本块的颜

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

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

我的问题是,当单击列表框项目时,它在移动到下一页之前不会显示选择颜色(默认情况下为手机的强调色)。是因为在创建列表框时文本块的颜色已经设置好了吗

因此,我尝试通过SelectionChanged()将其设置为所选项目的前景,如下所示

ListBoxItem selItem = (ListBoxItem)(listboxNotes.ItemContainerGenerator.ContainerFromIndex(listboxNotes.SelectedIndex));
selItem .Foreground = (SolidColorBrush)Application.Current.Resources["PhoneAccentBrush"];
但这不起作用,我假设它的原因是在项目中有一个stackpanel

究竟需要如何做到这一点?我是否需要检索stackpanel内的文本块并设置前景??我没有在这里使用装订。视觉树助手

谢谢


Alfah

通常,所选颜色不会在您导航的列表中更改

根据我使用安卓系统的经验,WP7上没有“选择器”背景。如果您正在寻找显示正在进行某些操作的酷UI效果,则绝对推荐使用
TiltEffect
,而且非常容易实现

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

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

internalvoid SelectionChanged()
{
var item=((ListBoxItem)_view.servers.SelectedItem.Content)作为StackPanel;
如果(项!=null)
{
对于(int i=0;i<\u view.servers.Items.Count;i++)
{
var val=((ListBoxItem)_view.servers.Items[i]).Content)作为StackPanel;
var tb=val.Children[0]作为文本块;
var tb2=val.Children[1]作为文本块;
if(i==\u view.servers.SelectedIndex)
{
tb.Foreground=tb2.Foreground=(SolidColorBrush)App.Current.Resources[“PhoneAccentBrush”];
}
其他的
{
tb.Foreground=tb2.Foreground=(SolidColorBrush)//此处为常规颜色,b/c所有这些都不应再被选择
}
}
}
}

列表项容器将自动更改其前景。要继承这一点,只需不在
文本块上指定颜色(或样式)

我从未在WP7应用程序上见过选定/按下的颜色。“你确定你在设计到平台上吗?”willmel yep。默认列表框具有按下的颜色。如果你想要一个“按下”状态,你应该看看倾斜效果@威尔梅尔:我该担心吗(我没有看到应用程序..所选项目的前景在我创建的两个列表框中都发生了变化。因此我认为这是默认行为:(您需要为列表框的
DataTemplate
发布XAML。默认情况下会出现重音颜色。但它也被认为是糟糕的用户体验。实际上有一个选择器颜色。请尝试使用标准列表框。@ClausJørgensen true-但它的使用方式与Android上的不同。@willmel我看到这很奇怪单击某个项目时,以前景作为手机主题颜色的文本块:O@willmel-我认为您混淆了两种效果。选定的项目在选定后更改了前景(文本)颜色,而不是处于按下状态。OP指的是前者。@willmel我通过一些复杂的方法得到了正确的结果..但现在有一个选项:)我按照您的建议从selecteditem中提取stackpanel,然后从中提取文本框并设置颜色;)是..我意识到..但是列表框中的项目根据一些数据设置为特定颜色。我需要设置颜色。有没有办法指定选定的颜色?
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
                            }

                        }
                    }
}