2015-04-02 92 views
0

在重复标记之前,请仔细阅读我的问题。在DataTemplate中访问填充矩形的颜色

我正在制作xaml c#VS2013中的Windows Phone应用程序。 我正在使用longlistselector中的Web API(因为我想让用户可以像列表框中一样选择项目)。

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的填充颜色分别为蓝色,橙色和绿色。 但是我无法改变矩形的颜色(从Web API消耗)

请指导我如何访问数据模板中的矩形应用if-else子句或其他改变基于优先级的颜色。

谢谢 请指导我。 如果你DONOT明白,请告知这样我就可以解释的。

回答

1

我的功课类明白你有一个叫类型的优先级属性枚举或字符串,

执行以下操作:

1:绑定矩形填充颜色,以该财产与转换器:

<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

谢谢。这种方法帮助我解决了这个问题。 – 2015-04-03 05:47:29