0

現在、小さなWindows Phone(7.5)アプリケーションで作業しており、ページの1つに、要素のリストにバインドされた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> 

Name / Descriptionの実際の値に応じて、各TextBlockのフォントの色を変更することは可能ですか?

4

3 に答える 3

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();
    }
}
于 2012-04-11T21:10:21.247 に答える
0

Name/Description タグに基づいて生成された Brush であるプロパティをクラスに作成し、それをテキスト ブロックの Foreground プロパティにバインドすると、動作するはずです...

または、エンティティ クラスにプロパティを追加せずにもう少し気を利かせたい場合は、ValueConverter (http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter. aspx)、それを行うコードが必要な場合はお知らせください。

于 2012-04-11T21:09:18.617 に答える
0

はい、独自のバインディング コンバーターを作成して、フォアグラウンドへのバインディングに使用できます。

于 2012-04-11T21:11:24.683 に答える