我已经创建了一个列表框,我可以相应地动态添加和删除项目UI更改并且工作正常。
<ListBox Name="MsgsList" ItemsSource="{Binding Items}" Style="{StaticResource MsgsBoxStyle}">
<ListBox.ItemTemplate>
<DataTemplate x:Name="MsgsDataTemplate">
<StackPanel Tag="{Binding MsgTagInfo}" ManipulationCompleted="StackPanel_Msgs_ManipulationCompleted">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Hold="GestureListener_Hold" Tap="GestureListener_Tap"/>
</toolkit:GestureService.GestureListener>
<Grid x:Name="ContentPanelInner" Grid.Row="1" Width="500">
<StackPanel x:Name="stackPanelInner" Width="500">
<Grid VerticalAlignment="Top" Width="500">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding MsgTitle}" Style="{StaticResource MsgLine1}" />
<TextBlock Grid.Column="1" Text="{Binding MsgDate}" Style="{StaticResource MsgDate}" />
</Grid>
<TextBlock Text="{Binding MsgBody}" Style="{StaticResource MsgLine2}" />
</StackPanel>
</Grid>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但我不明白如何更改特定项目的文本块的样式,比如基于某些条件,如果我想更改特定项目的文本框的颜色,不知道如何访问它。
有人可以帮我这个吗?感谢。答案 0 :(得分:2)
可能不是最简单的方法,但可以说从关注点分离的角度来看,最简洁的方法是使用转换器,然后将其绑定到要监控的属性......
例如,如果您的模型基于名为myProperty的布尔属性更改状态,则可以使用类似的内容。
<StackPanel Background={Binding myProperty, Converter={StaticResource myBindingConverter}" />
您的转换器应根据您的属性值返回SolidColorBrush。
public class AlternateRowColour : IValueConverter
{
SolidColorBrush normal = new SolidColorBrush(Colors.Transparent);
SolidColorBrush highlighted = new SolidColorBrush(Color.FromArgb(255, 241, 241, 241));
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var myValue = (bool)value
return myValue ? highlighted : normal ;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
答案 1 :(得分:1)
I如果您只想更改项目样式的某个方面(例如其颜色),则可以将其公开为您要绑定的模型对象的属性。例如,添加属性TextColor并按如下方式绑定它:
<TextBlock Text="{Binding MsgBody}" Style="{StaticResource MsgLine2}">
<TextBlock.Color>
<SolidColorBrush Color="{Binding TextColor}"/>
</TextBlock.Color>
</TextBlock>
这将优先于通过样式定义的颜色。