绑定到 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);
    }
}

如何以最佳方式实现所需的效果(将类型名称绑定为文本并使用类型的颜色为其着色)? 谢谢!

绑定到 XAML 中对象的属性

我建议使用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}}"/>
相关文章: