目前正在开发一个小型Windows Phone(7.5)应用程序,其中一个页面包含一个绑定到元素列表的ListBox。
<ListBox x:Name="MyListBox"
ItemsSource="{Binding Path=Listing}"
ItemTemplate="{StaticResource MyItemTemplate}" />
DataTemplate如下所示,其中“Name”和“Description”是“Entity”类的属性:
<DataTemplate x:Key="WordTemplate">
<ListBoxItem Tap="WordTapped">
<StackPanel Orientation="Vertical">
<TextBlock Width="Auto"
Text="{Binding Name}"
FontSize="{StaticResource PhoneFontSizeLarge}"
VerticalAlignment="Top"
TextWrapping="Wrap"
Margin="12, 0, 12, 0" />
<TextBlock Width="Auto"
Text="{Binding Description}"
Style="{StaticResource PhoneTextSmallStyle}"
VerticalAlignment="Top"
TextWrapping="Wrap"
Margin="12, 0, 12, 12" />
</StackPanel>
</ListBoxItem>
</DataTemplate>
是否可以 - 根据名称/描述的实际值 - 更改每个TextBlock的字体颜色?
答案 0 :(得分:2)
是的,使用ValueConverter
将名称和描述转换为画笔:
<phone:PhoneApplicationPage.Resources>
<Converters:TextToBrushConverter x:Key="yourConverter"/>
</phone:PhoneApplicationPage.Resources>
...
<TextBlock Width="Auto"
Text="{Binding Name}"
...
Foreground={Binding Name, Converter={StaticResource yourConverter}} />
转换器:
public class TextToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((string)value == "XXX")
{
return new SolidColorBrush(Colors.Red);
}
return new SolidColorBrush(Colors.Green);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
答案 1 :(得分:0)
如果您在类中创建了一个属性,该属性是基于您的Name / Description标签生成的Brush,并将其绑定到文本块的Foreground属性,那么它应该有用......
或者,如果你想要稍微更加精确,而不是为你的Entity类添加属性,你可以使用ValueConverter(http://msdn.microsoft.com/en-us/library/system.windows.data .ivalueconverter.aspx),如果你想要一些代码,请告诉我。
答案 2 :(得分:0)
是的,您可以创建自己的Binding Converter并将其用于绑定到Foreground。