我在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方法非常感谢您的建议。
答案 0 :(得分:-1)
请尝试输入硬编码的颜色值(例如红色或绿色),然后检查其是否有效。 然后,您将确定绑定无效。
另一种方法:
<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Foreground" Value="{Binding Path=MovieActorNameForegroundColor}"/>
</Style>
</ListBox.Resources>