绑定到 XAML 中对象的属性
本文关键字:属性 对象 XAML 绑定 | 更新日期: 2023-09-27 18:32:26
我有以下数据模板:
<Page.Resources>
<local:ColorToBrushConverter x:Key="ColorToBrush"/>
<DataTemplate x:Key="PokedexListTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" Grid.Column="0"/>
<StackPanel Grid.Column="1">
<TextBlock Text="Type1" Foreground="{Binding Type1.Color, Converter={StaticResource ColorToBrush}}"/>
<TextBlock Text="Type2" Foreground="{Binding Type2.Color, Converter={StaticResource ColorToBrush}}"/>
</StackPanel>
</Grid>
</DataTemplate>
</Page.Resources>
这正在填充Pokemon
对象:
public class Pokemon()
{
public PokeType Type1 { get; }
public PokeType Type2 { get; }
public string Name { get; }
}
反过来,它包含PokeType
对象:
public class PokeType()
{
public string TypeColor { get; } // "#FF0000", can be changed if that'd make things easier
public string Name { get; }
}
转炉
public class ColorToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string culture)
{
return new SolidColorBrush(Colors.Red);
}
public object ConvertBack(object value, Type targetType, object parameter, string culture)
{
throw new NotSupportedException();
}
private static Color Parse(string color)
{
var offset = color.StartsWith("#") ? 1 : 0;
var a = Byte.Parse(color.Substring(0 + offset, 2), NumberStyles.HexNumber);
var r = Byte.Parse(color.Substring(2 + offset, 2), NumberStyles.HexNumber);
var g = Byte.Parse(color.Substring(4 + offset, 2), NumberStyles.HexNumber);
var b = Byte.Parse(color.Substring(6 + offset, 2), NumberStyles.HexNumber);
return Color.FromArgb(a, r, g, b);
}
}
如何以最佳方式实现所需的效果(将类型名称绑定为文本并使用类型的颜色为其着色)? 谢谢!
我建议使用IValueConverter
- Foreground
绑定为Type1.TypeColor和Type2.TypeColor,但添加Converter
参数。
您还必须创建一个字符串到颜色转换器(您可以在此处找到示例:http://compiledexperience.com/blog/posts/useful-calue-converters/
)用法如下:
<Page.Resources>
<ColorToBrushConverter x:Key="ColorToBrush"/>
</Page.Resources>
...
<TextBlock Text="{Binding Type1.Name}" Foreground="{Binding Type1.Color, Converter={StaticResource ColourToBrushConverter}}"/>