2015-04-02 4 views
0

Пожалуйста, пройдите мою проблему, прежде чем отмечать ее дубликат.Доступ к заполнению Цвет прямоугольника внутри DataTemplate

Я делаю приложение Windows Phone в xaml C# VS2013. Я использую веб-API в longlistselector (потому что я хочу разрешить пользователю выбирать элемент, как в списке).

XAML

    <phone:LongListSelector Margin="24,0" x:Name="Longlist" d:IsHidden="True" ItemTemplate="{StaticResource GoalTemplate}"/> 



<phone:PhoneApplicationPage.Resources> 
    <DataTemplate x:Key="GoalTemplate"> 
     <Grid Width="432" Height="90" Margin="0,33,0,0"> 
      <StackPanel Orientation="Horizontal"> 
       <Rectangle HorizontalAlignment="Left" Height="90" StrokeThickness="0" VerticalAlignment="Top" Width="4"> 
        <Rectangle.Fill> 
         <SolidColorBrush Color="{Binding rcolor, Mode=OneWay}"/> 
        </Rectangle.Fill> 
       </Rectangle> 
       <StackPanel HorizontalAlignment="Left" Height="86" Margin="27,4,0,0" VerticalAlignment="Top" Width="400"> 
        <TextBlock Text="{Binding Name}" HorizontalAlignment="Left" Height="37" TextWrapping="Wrap" VerticalAlignment="Top" Width="405" Foreground="{StaticResource FlatUI-Blue1}" FontSize="26.667"/> 
        <TextBlock Text="{Binding Description}" TextWrapping="Wrap" FontSize="14.667" Height="49" Foreground="{StaticResource FlatUI-Grey}"/> 
       </StackPanel> 
      </StackPanel> 
     </Grid> 
    </DataTemplate> 

</phone:PhoneApplicationPage.Resources> 

XAML.CS Код

void Maths_Loaded(object sender, RoutedEventArgs e) 
    { 
     string uri = "http://localhost:1361/api/chore"; 
     WebClient client = new WebClient(); 
     client.Headers["Accept"] = "application/json"; 
     client.DownloadStringAsync(new Uri(uri)); 
     client.DownloadStringCompleted += (s1, e1) => 
     { 
      //var data = JsonConvert.DeserializeObject<HomeWork[]>(e1.Result.ToString()); 
      //MessageBox.Show(data.ToString()); 
      var hw = JsonConvert.DeserializeObject<HomeWork[]>(e1.Result.ToString()); 
      foreach (HomeWork c in hw) 
      { 
       if (c.Chore_Type == "Maths") 
       { 
        result.Add(c); 
        // result is a List<HomeWork> to store only maths 
        // homework in longlistselector 
       } 

      } 

      Longlist.ItemsSource = result; 


     }; 
    } 

Теперь моя проблема У меня есть прямоугольник, который указывает на приоритет в выполнении домашних заданий. В базе данных у меня есть столбец приоритета, содержащий «Обычный», «Средний» и «Высокий» приоритет. И я хочу, чтобы цвет заливки Rectangle был синим, оранжевым и зеленым соответственно. Но я не могу изменить цвет прямоугольника относительно его приоритета (который используется из веб-API.

Просьба указать мне, как получить доступ к прямоугольнику в шаблоне данных, применить if-else Предложение или что-то еще изменение цвета в зависимости от приоритета.

Спасибо, Пожалуйста, Ведите меня. Если вы выигрыш понять, пожалуйста, сообщите так я могу объяснить.

ответ

1

Я понимаю, в классе домашнего задания у вас есть свойство Priority типа Перечисление или строка,

Выполните следующие действия:

1: Привяжите Rectangle Fill Color для этого свойства с преобразователем:

<Rectangle HorizontalAlignment="Left" Height="90" StrokeThickness="0" VerticalAlignment="Top" Width="4"> 
     <Rectangle.Fill> 
       <SolidColorBrush Color="{Binding Priority, Converter={StaticResource PriorityColorConverter}"/> 
     </Rectangle.Fill> 
    </Rectangle> 

2: А теперь добавить конвертер следующим образом:

<Page...> 
... 
<Page.Resources> 
<Converters:PriorityColorConverter x:Key="PriorityColorConverter"/> 
</Page.Resources> 

3 : И создайте этот преобразователь:

public class PriorityColorConverter : IValueConverter 
    { 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var priority = (Priorities)value; 

     if (priority == Priorities.High) 
      return Colors.Blue; 
     else if (priority == Priorities.Medium) 
      return Colors.Orange; 
     else 
      return Colors.Green; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Конечно, добавьте в страницу пространство имен xmlns, где вы создали конвертер.

+0

спасибо. Этот подход помог мне решить проблему. –