改变 ListView 的前景色
Changing Forecolor of ListView
我真的需要你的帮助,因为我找不到解决我的问题的方法!
我正在开发一个 Universal Windows 10 应用程序,其中有一个时间表 (ListView)。
现在我想在时间表中标记项目,目前是运行。例如,有一个从星期一 07:00 到 13:00 的项目,现在是星期一 12:00 所以该项目应该将其颜色更改为红色(或其他颜色),就像它被标记一样。
我现在已经尝试了几种方法,这就是目前的代码:
首先是我的 xaml-ListView 代码:
<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];
抛出异常:
{"Unable to cast object of type 'CampusAppHSHof.Classes.Stundenplan' to type 'Windows.UI.Xaml.Controls.ListViewItem'."}
我希望代码足以让您重现问题...我尽量让它尽可能短...
通常我们不会直接操作ListView的item,通常的做法是将item添加到ObservableCollection
,然后设置ListView的ItemSource属性绑定到ObservableCollection
。
根据问题,lstViewStundenplan.Items
获取用于生成 ListView
内容的集合。在您的项目中,集合中的项目是 Stundenplan
类型。所以你得到了例外:
{"Unable to cast object of type 'CampusAppHSHof.Classes.Stundenplan' to type 'Windows.UI.Xaml.Controls.ListViewItem'."}
您可以使用ItemsControl.ContainerFromItem
获取指定项目对应的容器。您可以将其转换为 ListViewItem
类型。
顺便说一下,在 AktuelleZeit
方法中,代码 ListView lstView = new ListView(); lstView = lstViewStundenplan;
似乎是多余的。
例如:
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);
}
}
我真的需要你的帮助,因为我找不到解决我的问题的方法!
我正在开发一个 Universal Windows 10 应用程序,其中有一个时间表 (ListView)。
现在我想在时间表中标记项目,目前是运行。例如,有一个从星期一 07:00 到 13:00 的项目,现在是星期一 12:00 所以该项目应该将其颜色更改为红色(或其他颜色),就像它被标记一样。
我现在已经尝试了几种方法,这就是目前的代码:
首先是我的 xaml-ListView 代码:
<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];
抛出异常:
{"Unable to cast object of type 'CampusAppHSHof.Classes.Stundenplan' to type 'Windows.UI.Xaml.Controls.ListViewItem'."}
我希望代码足以让您重现问题...我尽量让它尽可能短...
通常我们不会直接操作ListView的item,通常的做法是将item添加到ObservableCollection
,然后设置ListView的ItemSource属性绑定到ObservableCollection
。
根据问题,lstViewStundenplan.Items
获取用于生成 ListView
内容的集合。在您的项目中,集合中的项目是 Stundenplan
类型。所以你得到了例外:
{"Unable to cast object of type 'CampusAppHSHof.Classes.Stundenplan' to type 'Windows.UI.Xaml.Controls.ListViewItem'."}
您可以使用ItemsControl.ContainerFromItem
获取指定项目对应的容器。您可以将其转换为 ListViewItem
类型。
顺便说一下,在 AktuelleZeit
方法中,代码 ListView lstView = new ListView(); lstView = lstViewStundenplan;
似乎是多余的。
例如:
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);
}
}