更改ListView的前景色

时间:2016-03-23 18:46:49

标签: listview windows-10 listviewitem windows-10-universal windows-10-mobile

我真的需要你的帮助,因为我无法找到解决问题的方法!

我正在开发通用Windows 10应用并且其中包含时间表(ListView)。

现在我想在当前正在运行的时间表中标记该项目。例如,有一个项目从星期一07:00到13:00,现在是星期一12:00,所以该项目应该将其颜色更改为红色(或其他东西),就像它被标记一样。

我现在已经尝试了几件事,而且到目前为止这是代码:

首先是我的ListView的xaml-Code:

<RelativePanel Name="rpStundenplan">
        <ListView x:Name="lstViewStundenplan" HorizontalContentAlignment="Stretch" SelectionChanged="lstViewStundenplan_SelectionChanged">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <RelativePanel Grid.Row="0" Grid.Column="0">
                            <RelativePanel Name="rpTag" Width="100">
                                <TextBlock Name="txtTag" FontSize="16" Text="{Binding Tag_lang}" TextWrapping="Wrap" RelativePanel.AlignHorizontalCenterWithPanel="True" />
                            </RelativePanel>
                            <RelativePanel Name="rpZeit" Width="auto" RelativePanel.Below="rpTag" RelativePanel.AlignHorizontalCenterWith="rpTag">
                                <TextBlock Name="txtZeitVon" FontSize="14" Text="{Binding Beginn}" VerticalAlignment="Center"/>
                                <TextBlock Name="txtZeitBis" FontSize="14" Text="{Binding Ende}" VerticalAlignment="Center" RelativePanel.RightOf="txtZeitVon" Margin="5,0,0,0" />
                            </RelativePanel>
                      </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </RelativePanel>

我使用以下代码填充ListView:

    private void StundenplanAktualisieren()
    {
        //Studiengänge aus integrierter Datenbank in ListView eintragen
        using (SQLite.Net.SQLiteConnection connIntern = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), sPathdatabaseIntern))
        {
            var query = connIntern.Table<Classes.Stundenplan>();

            //ListBox erste leeren
            this.lstViewStundenplan.Items.Clear();

            foreach (var item in query)
            {
                this.lstViewStundenplan.Items.Add(item);
            }
        }
    }

现在出现错误的代码:

public void AktuelleZeit()
    {
        //markiert die aktive Vorlesung
        ListView lstView = new ListView();
        lstView = lstViewStundenplan;

        for (int i = 1; i < lstView.Items.Count; i++)
        {
                    ListViewItem Item = (ListViewItem)lstViewStundenplan.Items[i];

                    Item.Foreground = new SolidColorBrush(Windows.UI.Colors.Red);
        }

    }

不幸的是行

ListViewItem Item = (ListViewItem)lstViewStundenplan.Items[i];

抛出了这个例子:

  

{&#34;无法投射类型&#39; CampusAppHSHof.Classes.Stundenplan&#39;键入&#39; Windows.UI.Xaml.Controls.ListViewItem&#39;。&#34;}

我希望代码足以让你重现问题......我试着让它尽可能短......

1 个答案:

答案 0 :(得分:0)

通常我们不直接操作ListView的项目,常见的方法是将项目添加到ObservableCollection并设置ListView的ItemSource属性以绑定到ObservableCollection

根据问题,lstViewStundenplan.Items获取用于生成ListView内容的集合。在您的项目中,集合中的项目为Stundenplan类型。所以你得到了这个例子:

  

{“无法将'CampusAppHSHof.Classes.Stundenplan'类型的对象强制转换为'Windows.UI.Xaml.Controls.ListViewItem'。”}

您可以使用ItemsControl.ContainerFromItem获取与指定项目对应的容器。您可以将其强制转换为ListViewItem类型。

顺便说一下,在AktuelleZeit方法中代码ListView lstView = new ListView(); lstView = lstViewStundenplan; semms是多余的。

例如:

public void AktuelleZeit()
{
    for (int i = 1; i < lstViewStundenplan.Items.Count; i++)
    {
        ListViewItem Item = (lstViewStundenplan).ContainerFromItem(lstViewStundenplan.Items[i]) as ListViewItem;
        Item.Foreground = new SolidColorBrush(Windows.UI.Colors.Red);
    }
}