访问 DataTemplate 中矩形的填充颜色

Accessing Fill Color of rectangle inside DataTemplate

请先检查我的问题,然后再将其标记为重复。

我正在 xaml c# VS2013 中制作一个 Windows Phone 应用程序。 我在 longlistselect 中使用 Web API 或者(因为我想允许用户像列表框中的 select 项目)。

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;


        };
    }

现在我的问题是 我有一个矩形,表示作业的优先级。 在数据库中,我有包含 "Normal"、"medium" 和 "High" 优先级的优先级列。 我希望 Rectangle 的填充颜色分别为蓝色、橙色和绿色。 但是我无法根据其优先级(从 Web API.

消耗的优先级更改矩形的颜色

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

谢谢, 请指导我。 不明白的请告知,我会解释。

我在家庭作业中了解到 class 你有一个 属性 称为枚举或字符串类型的优先级,

执行以下操作:

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 命名空间。