绑定到后台的数据模板 属性

Data template binding to background property

我有以下xaml

<UserControl
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:Octokit="clr-namespace:Octokit;assembly=Octokit" x:Class="IssuesManagment.UI.POC.Controls.GithubIssue" 
         mc:Ignorable="d" 
         d:DesignHeight="147" d:DesignWidth="295" BorderBrush="#FFD84B4B" BorderThickness="1" Width="Auto" Height="Auto" Margin="0,0,0,2">
<UserControl.DataContext>
    <Octokit:Issue/>
</UserControl.DataContext>
<StackPanel>
    <TextBlock>
        <Hyperlink NavigateUri="{Binding HtmlUrl}" RequestNavigate="Hyperlink_RequestNavigate">
            <TextBlock x:Name="issueTitle" TextWrapping="Wrap" Text="{Binding Title}" FontWeight="Bold" FontSize="16" />
        </Hyperlink>
    </TextBlock>
    <TextBlock x:Name="issueBody" TextWrapping="Wrap" Text="{Binding Body}" Margin="2"/>
    <ListBox ItemsSource="{Binding Labels}">
        <ListBox.ItemTemplate>
            <DataTemplate DataType="Octokit:Label">
                <TextBlock Text="{Binding Name}">
                    <TextBlock.Background>
                        <SolidColorBrush Color="{Binding Color}"></SolidColorBrush>
                    </TextBlock.Background>
                </TextBlock>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</StackPanel>
</UserControl>

我的问题是 ListBox 中的项目没有获得正确的背景颜色

截图如下:

例如,要素标签的颜色为 e11d21 模型定义为 here

结构的相关部分是:

Issue
|
|- Labels : IReadOnlyList<Label>
                           |
                           |- Name
                           |- Color

要么 属性 正确绑定到 TextBlock 的文本,但不能绑定到它的任何其他属性。

您在 class 中的 Color 是 typeof String 而不是 Color,因此您需要以下转换器:

public class StringColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var color = (Color)typeof(Colors).GetProperty((String)value).GetValue(null, null);

        return color;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return String.Empty;
    }
}

并且在 XAML 中,资源和示例

<Window.Resources>
    <local:StringColorConverter x:Key="StringColorConverter"/>
</Window.Resources>

 <TextBlock Width="200" Height="200">
        <TextBlock.Background>
            <SolidColorBrush Color="{Binding Color, Converter={StaticResource StringColorConverter}}"/>
        </TextBlock.Background>
    </TextBlock>