位于ListBox.ItemTemplate中的TextBlock的绑定前景

时间:2018-10-10 06:33:13

标签: c# wpf data-binding

我在WPF窗口中有一个列表框,并且有一个图像+文本块作为项目。我正在尝试通过属性(即ItemForegroundColor)设置文本块的前景。

ItemForegroundColor是SolidColorBrush类型的ViewModel中的属性,而不是AppInfoCollection中item的属性。

前景色未设置为预期的颜色,而是保持黑色。

<ListBox Name="lbInfoGridView" 
             ScrollViewer.VerticalScrollBarVisibility="Disabled"
             ScrollViewer.HorizontalScrollBarVisibility="Disabled"
             ScrollViewer.CanContentScroll="False" 
             Background="{Binding Path=BackgroundColor}"
             ItemsSource="{Binding AppInfoCollection}">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="5"
                             VerticalAlignment="Stretch"
                             HorizontalAlignment="Center"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Name="spItemInfo"
                            Orientation="Horizontal"
                            HorizontalAlignment="Stretch"
                            VerticalAlignment="Stretch"
                            Margin="0 0 0 0"
                            Background="{Binding Path=BackgroundColor}">
                    <Image  Name="imgProfile" 
                            Margin="0 0 0 0"
                            Width="50" Height="100"
                            Source="{Binding ProfileImage, Converter={StaticResource binaryConverter}}"></Image>
                    <TextBlock  Name="tbName" 
                                Margin="10 0 0 0"
                                Text="{Binding Name}" 
                                Foreground="{Binding Path=ItemForegroundColor}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>

    </ListBox>

我认为问题可能是ListBox.ItemTemplate无法引用ViewModel级别。因此,我尝试使用下面的方法。

Foreground="{Binding Path=MovieActorNameForegroundColor, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}} }"

还尝试了https://wildermuth.com/2007/04/17/Changing_the_Selected_Style_of_ListBox_s_in_XAML

中提到的ItemContainerStyle方法

非常感谢您的建议。

1 个答案:

答案 0 :(得分:-1)

请尝试输入硬编码的颜色值(例如红色或绿色),然后检查其是否有效。 然后,您将确定绑定无效。

另一种方法:

<ListBox.Resources>
   <Style TargetType="{x:Type ListBoxItem}">
       <Setter Property="Foreground" Value="{Binding Path=MovieActorNameForegroundColor}"/>
   </Style>
</ListBox.Resources>