我的Windows Phone 8应用程序有一个longlistselector:
<phone:LongListSelector x:Name="AppMenuList" Background="Transparent"
ItemTemplate="{StaticResource AppMenuListTemplate}"
IsGroupingEnabled="true" HideEmptyGroups="true"
LayoutMode="List" SelectionChanged="OnMenuItemTapped"
Margin="5,50,0,0"/>
使用以下DataTemplate
:
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="AppMenuListTemplate">
<Grid>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0" Height="80" Width="800" Tap="vTapFeedback">
<TextBlock HorizontalAlignment="Left" Margin="0,20,0,20" Height="50"
Width="800" TextWrapping="NoWrap"
Text="{Binding MenuItemName}" VerticalAlignment="Center"
FontSize="32" Foreground="#115445" />
</StackPanel>
</Grid>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
从我的C#代码中,我为longlistselector设置ItemsSource
属性,以向用户显示项目列表。但是,所有项目的颜色与TextBlock
属性Foreground
中指定的颜色相同。
我有一个要求,我希望用户能够点击列表中的每个项目并执行除一个之外的某些操作。我希望它应该通过使用灰色显示为用户禁用。
我无法做到这一点。谁能建议我怎么做呢?
答案 0 :(得分:2)
我想到了三种解决方案:
编辑 - 请求后的代码示例
我这样定义了我的转换器:
namespace myApp.Converters
{
public class BoolToBrush : IValueConverter
{
private Brush FalseValue = (Application.Current.Resources["TransparentBrush"] as Brush);
private Brush TrueValue = (Application.Current.Resources["PhoneAccentBrush"] as Brush);
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return FalseValue;
else
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.Equals(TrueValue) : false;
}
}
在我的Item类中,我有一个属性Selected(在本例中为bool),前景(或背景)绑定到该属性。我在XAML(项目或控件)中使用它,如下所示:
<UserControl.Resources xmlns:local="clr-namespace:myApp.Converters">
<local:BoolToBrush x:Key="boolToBrush"/>
</UserControl.Resources>
<Grid Name="myElement" Background="{Binding Path=Selected, Converter={StaticResource boolToBrush}}">
当然,您可以定义更多的复合转换 - 如果您需要更多画笔等等 另一方面,我也会考虑使用VisualStates。
希望这有点帮助。