我正在尝试将 DataTemplate 内标签的前景绑定到祖先,这是摘录:
查看模型代码
public class DeviceOverview
{
public string DeviceName { get; set; }
public string DeviceState { get; set; }
}
public ObservableCollection<DeviceOverview> DeviceOverviewList { get; set; }
这是xaml:
<ItemsControl ItemsSource="{Binding DeviceOverviewList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DockPanel Margin="20,5,5,5">
<Image Source="{Binding DeviceState, Converter={StaticResource ConvertStateToLed}}" Width="30"/>
<Label Content="{Binding DeviceName}" Width="220" Margin="-60,0,0,0" Foreground="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.FontColor}"/>
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Window 控件有自己的 DataContext 及其 ViewModel 及其属性 FontColor,并且一切正常。尽管如此,我还是收到以下错误:
在 DeviceOverview 对象中找不到 FontColor 属性。
为什么我会收到此错误?我怎样才能摆脱它? 谢谢
假设 FontColor 是窗口 ViewModel 的属性,则您的绑定声明中存在一些错误。
<Label Content="{Binding DeviceName}"
Width="220"
Margin="-60,0,0,0"
Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.FontColor}" />
另请注意,
Label.Foreground
是 Brush
,而不是 Color
,需要绑定到该类型的 a 属性,或者使用值转换器。