绑定到后台的数据模板 属性
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>
我有以下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>