【发布时间】:2015-09-21 11:32:19
【问题描述】:
我有类似 Outlook 的应用程序。有3个部分。中间部分包含 ListView。 Middle Section ListView的元素有计算样式
(红色字体 = 过时的作业,螺栓字体 = 未读作业,删除线文本 = 执行的工作)
。条件可能会以不同的变化形式相交。
我有 Section2 的 Xaml 标记:
<HubSection Name="Section2" Width="400" DataContext="{Binding Section2Items}"
d:DataContext="{Binding Groups[0], Source={d:DesignData Source=../HopUp.Shared/DataModel/SampleData.json, Type=data:SampleDataSource}}"
x:Uid="Section2Header" Header="Section 2" Padding="5,25,0,10">
<DataTemplate>
<ListView
x:Name="lvSection2"
ItemsSource="{Binding Items}"
Margin="0,-0,0,0"
AutomationProperties.AutomationId="ItemGridView"
AutomationProperties.Name="Items In Group"
ItemTemplate="{StaticResource StandardTripleLineItemTemplate}"
SelectionMode="Single"
IsSwipeEnabled="false"
IsItemClickEnabled="True"
ItemClick="ItemView_ItemClickContent">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected">
<Storyboard>
<ColorAnimation Duration="0" Storyboard.TargetName="myback" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="Transparent"/>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedUnfocused">
<Storyboard>
<ColorAnimation Duration="0" Storyboard.TargetName="myback" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="Red"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="myback" Background="Transparent">
<ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</DataTemplate>
</HubSection>
而且我需要根据不同的条件设置不同样式的ListViewItem。
后面有代码:
SampleDataGroup oContentFolder = await MainFunctionality.GetContent(pbActive, m_sUri, sFirstID, m_sSessionID);
if (oContentFolder != null)
{
Section2.Header = sFirstName;
this.DefaultViewModel["Section2Items"] = oContentFolder;
lv = Utilities.Utilities.FindVisualChildByName<ListView>(Section2, "lvSection2");
if (lv != null)
for (int j = 0; j < oContentFolder.Items.Count; j++)
{
if (oContentFolder.Items[j].ItemType == "ctJob")
{
if (oContentFolder.Items[j].ItemState == "InWork")
{
}
}
}
lv.SelectedIndex = 0;
如何设置 ListViewItem 样式
【问题讨论】:
-
我认为它必须通过 lv.Items[j] 的操作来完成,但只有可以转换 lv.Items[j] 的类是我的 SampleDataContent,而不是任何 Control 或 UIFrameworkElement。
-
我不会用后面的代码来设置它。我宁愿使用自定义转换器将要设置样式的属性绑定到模板项。
-
我可以向 XAML 标记添加一些模板,但是我如何选择分配给当前 ListViewItem 的控件来设置样式。
标签: c# wpf xaml windows-runtime