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的原因是
listViewTest.ScrollIntoView(listViewTest.SelectedItem)之前代码>
调用waitSystem.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时,它返回nulllistViewTest.Items[listViewTest.SelectedIndex]作为ListViewItem
您添加了ListViewItem还是仍在使用项目模板我正在使用项目模板