Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WP中的代码隐藏更改列表视图所选项目的前景色_C#_Xaml_Listview_Windows Phone_Windows Phone 8.1 - Fatal编程技术网

C# 从WP中的代码隐藏更改列表视图所选项目的前景色

C# 从WP中的代码隐藏更改列表视图所选项目的前景色,c#,xaml,listview,windows-phone,windows-phone-8.1,C#,Xaml,Listview,Windows Phone,Windows Phone 8.1,我试图从代码隐藏更改列表视图的前景色,但我得到的对象引用未设置为对象异常的实例这是我的代码 var item = listViewTest.SelectedItem; ListViewItem listViewItem = this.listViewTest.ContainerFromItem(item) as ListViewItem; listViewItem.Foreground = new SolidColorBrush(Colors.GreenYellow); //manually

我试图从代码隐藏更改列表视图的前景色,但我得到的对象引用未设置为对象异常的实例
这是我的代码

var item = listViewTest.SelectedItem;
ListViewItem listViewItem = this.listViewTest.ContainerFromItem(item) as ListViewItem;
listViewItem.Foreground = new SolidColorBrush(Colors.GreenYellow);

//manually scrolling to the selected item
listViewTest.ScrollIntoView(listViewTest.SelectedItem);
正如您从代码中看到的,我想要的是将前景颜色更改为黄色,然后滚动到特定的listview项目。滚动工作,但前景颜色不工作,我得到例外

更新 这是项目模板

            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,0,0,9.5">
                        <TextBlock
                            FontFamily="Times New Roman"
                            Text="{Binding Id}"
                            HorizontalAlignment="Right"
                            Pivot.SlideInAnimationGroup="1"
                            CommonNavigationTransitionInfo.IsStaggerElement="True"
                            Style="{StaticResource ListViewItemTextBlockBlackStyle}"/>
                        <TextBlock
                            Text="{Binding FullInfo}"
                            HorizontalAlignment="Right"
                            Pivot.SlideInAnimationGroup="2"
                            CommonNavigationTransitionInfo.IsStaggerElement="True"
                            Style="{StaticResource ListViewItemSubheaderTextBlockBlackStyle}"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>

更新2 下面是显示
ContainerFromItem
null的调试器

您可以使用以下代码更改所选项目的前景色

private void connecteditems_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ListViewItem item = (sender as ListView).SelectedItem;
        item.Foreground = new SolidColorBrush(Colors.Red);
    }

listViewTest.ContainerFromItem(item)
返回null的原因是

  • 容器尚未渲染
  • 没有找到任何项目
  • 容器项在listview中尚不可见(可能需要滚动查看该项)
  • 解决方案 在调用
    listViewTest.ScrollIntoView(listViewTest.SelectedItem)之前

    调用wait
    System.Threading.Tasks.Task.Delay(1)
    让listview先加载。然后只调用
    scrollToView()

    另一个解决方案是自己添加项目,这样您就可以通过
    listViewTest.Items[listViewTest.SelectedIndex]
    访问容器,并在其中设置前景色

    编辑 要手动添加项目,只需在项目中循环并调用此方法

        private void AddItem(Foo f)
        {
            ListViewItem lvi = new ListViewItem();
            StackPanel sp = new StackPanel();
            TextBlock tb_id = new TextBlock();
            tb_id.Text = f.Id;
            // Set your other proerty here
            sp.Children.Add(tb_id);
    
            TextBlock tb_fullInfo = new TextBlock();
            tb_fullInfo.Text = f.FullInfo;
            // Set your other property here
            sp.Children.Add(tb_fullInfo);
    
            lvi.Content = sp;
            listViewTest.Items.Add(lvi);
        }
    

    当然,您还需要设置其他属性,如字体系列等。

    ItemTemplate的外观如何?我尝试了一个新的解决方案,但没有出现这样的问题-你能检查一下吗?另外,实现一些绑定和更改项的属性可能比获取其容器更容易。@Romasz,我用项更新了问题template@Romasz,您的示例应用程序名称是什么?它是Example81 ListView,当您单击链接时,它应该被选中。@Romasz我在另一个xaml视图
    NavigationHelper\u LoadState
    coz中编写了我的代码,因为在加载视图时,我想滚动到该项目并突出显示它
    对象的实例不能被指定为Windows.UI.xaml.Controls.ListViewItem类型的变量。编译器错误。我强制转换了它,但仍然没有触发选择更改事件如何在
    listViewTest.Items[listViewTest.SelectedIndex]
    之后设置颜色?您可以将其强制转换为“ListViewItem”,并设置前景我这样做了。它确实返回所选项目,但当我对其进行casst时,它返回null
    listViewTest.Items[listViewTest.SelectedIndex]作为ListViewItem
    您添加了ListViewItem还是仍在使用项目模板我正在使用项目模板