将颜色绑定到 ListBoxItem 对象颜色值
Binding Color to ListBoxItem Object Color Value
我有一个列表框,里面装满了 class 个定义为已分配任务的对象。 ItemTemplate 在填充时正确绑定并显示适当的信息,但我试图根据分配的类别的颜色设置每个项目的背景。当我为渐变画笔赋予特定颜色时,背景正确绑定,但当我将它绑定到任务对象的颜色时,它不显示。在调试中,我已经确认我的任务对象的颜色设置正确。如何将渐变停止颜色绑定到列表中每个单独对象的颜色?
<ListBox Name="lboxAssignedTasks" SelectionMode="Single" VerticalAlignment="Top" SelectionChanged="lboxAssignedTasks_SelectionChanged"
HorizontalAlignment="Stretch" Margin="5,10,20,0" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Name="colTaskName" MinWidth="200"/>
<ColumnDefinition Name="colDateDue" MinWidth="75" />
<ColumnDefinition Name="colStatus" MinWidth="75"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=TaskName}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,5,0,0"/>
<TextBlock Grid.Column="1" Text="{Binding Path=DateDue}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,5,0,0"/>
<TextBlock Grid.Column="2" Text="{Binding Path=Status}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5,0,0"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="{DynamicResource BackGroundGradBrush}" />
<Style.Resources>
<LinearGradientBrush StartPoint="1,0" EndPoint="1,1" x:Key="BackGroundGradBrush">
<GradientStop Color="White" Offset="0.2" />
<GradientStop Color="White" Offset="0.85" />
<GradientStop Color="{Binding Path=CatColor}" Offset="0.95" />
</LinearGradientBrush>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" />
</Style.Resources>
</Style>
</ListBox.Resources>
</ListBox>
class对象定义:
public class AssignedTask : UnAssignedTask
{
public int TaskId { get; set; }
public string Status { get; set; }
public string AssignedUser { get; set; }
public string AssignedBy { get; set; }
public string DateAssigned { get; set; }
public string DateDue { get; set; }
public string UserNotes { get; set; }
public bool IsCompleted { get; set; }
public Category Cat { get; set; }
public Color CatColor { get; set; }
}
我看不到 CatColor 是什么类型,但请确保分配任务中的 Cat Color 是 System.Windows.Media.Color
类型。
此外,您可能想要使用 ItemContainerStyle,如下所述:ListBoxItem style in <ListBox.Resources> or in <ListBox.ItemContainerStyle>?
我将模板移动到 并将 更改为 a 以处理通过设置网格背景被覆盖的突出显示触发器。线性渐变画笔已从资源中移出,而是作为 .这为列表框中的每个 AssignedTask 对象公开了 CatColor 属性。
<ListBox Name="lboxAssignedTasks" SelectionMode="Single" VerticalAlignment="Top" SelectionChanged="lboxAssignedTasks_SelectionChanged"
HorizontalAlignment="Stretch" Margin="5,10,20,0">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Grid Name="lbItemGrid">
<Grid.Background>
<LinearGradientBrush StartPoint="1,0" EndPoint="1,1">
<GradientStop Color="White" Offset="0.2" />
<GradientStop Color="White" Offset="0.85" />
<GradientStop Color="{Binding Path=CatColor}" Offset="0.95" />
</LinearGradientBrush>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Name="colTaskName" MinWidth="200"/>
<ColumnDefinition Name="colDateDue" MinWidth="75" />
<ColumnDefinition Name="colStatus" MinWidth="75"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=TaskName}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="15,5,0,0"/>
<TextBlock Grid.Column="1" Text="{Binding Path=DateDue}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,5,0,0"/>
<TextBlock Grid.Column="2" Text="{Binding Path=Status}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5,0,0"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" TargetName="lbItemGrid" Value="Lightblue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
我有一个列表框,里面装满了 class 个定义为已分配任务的对象。 ItemTemplate 在填充时正确绑定并显示适当的信息,但我试图根据分配的类别的颜色设置每个项目的背景。当我为渐变画笔赋予特定颜色时,背景正确绑定,但当我将它绑定到任务对象的颜色时,它不显示。在调试中,我已经确认我的任务对象的颜色设置正确。如何将渐变停止颜色绑定到列表中每个单独对象的颜色?
<ListBox Name="lboxAssignedTasks" SelectionMode="Single" VerticalAlignment="Top" SelectionChanged="lboxAssignedTasks_SelectionChanged"
HorizontalAlignment="Stretch" Margin="5,10,20,0" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Name="colTaskName" MinWidth="200"/>
<ColumnDefinition Name="colDateDue" MinWidth="75" />
<ColumnDefinition Name="colStatus" MinWidth="75"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=TaskName}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,5,0,0"/>
<TextBlock Grid.Column="1" Text="{Binding Path=DateDue}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,5,0,0"/>
<TextBlock Grid.Column="2" Text="{Binding Path=Status}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5,0,0"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="{DynamicResource BackGroundGradBrush}" />
<Style.Resources>
<LinearGradientBrush StartPoint="1,0" EndPoint="1,1" x:Key="BackGroundGradBrush">
<GradientStop Color="White" Offset="0.2" />
<GradientStop Color="White" Offset="0.85" />
<GradientStop Color="{Binding Path=CatColor}" Offset="0.95" />
</LinearGradientBrush>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" />
</Style.Resources>
</Style>
</ListBox.Resources>
</ListBox>
class对象定义:
public class AssignedTask : UnAssignedTask
{
public int TaskId { get; set; }
public string Status { get; set; }
public string AssignedUser { get; set; }
public string AssignedBy { get; set; }
public string DateAssigned { get; set; }
public string DateDue { get; set; }
public string UserNotes { get; set; }
public bool IsCompleted { get; set; }
public Category Cat { get; set; }
public Color CatColor { get; set; }
}
我看不到 CatColor 是什么类型,但请确保分配任务中的 Cat Color 是 System.Windows.Media.Color
类型。
此外,您可能想要使用 ItemContainerStyle,如下所述:ListBoxItem style in <ListBox.Resources> or in <ListBox.ItemContainerStyle>?
我将模板移动到 并将 更改为 a 以处理通过设置网格背景被覆盖的突出显示触发器。线性渐变画笔已从资源中移出,而是作为 .这为列表框中的每个 AssignedTask 对象公开了 CatColor 属性。
<ListBox Name="lboxAssignedTasks" SelectionMode="Single" VerticalAlignment="Top" SelectionChanged="lboxAssignedTasks_SelectionChanged"
HorizontalAlignment="Stretch" Margin="5,10,20,0">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Grid Name="lbItemGrid">
<Grid.Background>
<LinearGradientBrush StartPoint="1,0" EndPoint="1,1">
<GradientStop Color="White" Offset="0.2" />
<GradientStop Color="White" Offset="0.85" />
<GradientStop Color="{Binding Path=CatColor}" Offset="0.95" />
</LinearGradientBrush>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Name="colTaskName" MinWidth="200"/>
<ColumnDefinition Name="colDateDue" MinWidth="75" />
<ColumnDefinition Name="colStatus" MinWidth="75"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=TaskName}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="15,5,0,0"/>
<TextBlock Grid.Column="1" Text="{Binding Path=DateDue}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,5,0,0"/>
<TextBlock Grid.Column="2" Text="{Binding Path=Status}" MinHeight="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5,0,0"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" TargetName="lbItemGrid" Value="Lightblue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>