访问 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 命名空间。
请先检查我的问题,然后再将其标记为重复。
我正在 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 命名空间。