我有一个ObservableCollection<Foo> fooList,MasterDetailsView的下面的代码,它只是一个更高级的ListView
<controls:MasterDetailsView
Grid.Row="1"
x:Name="MasterDetailsViewControl"
ItemsSource="{x:Bind fooList}"
SelectedItem="{x:Bind Selected, Mode=OneWay}"
ItemTemplate="{StaticResource ItemTemplate}"
DetailsTemplate="{StaticResource DetailsTemplate}"
NoSelectionContentTemplate="{StaticResource NoSelectionContentTemplate}"
BorderBrush="Transparent">
<controls:MasterDetailsView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Background">
<Setter.Value>
<Binding Path="PathToFooBrushGoesHere" />
</Setter.Value>
</Setter>
</Style>
</controls:MasterDetailsView.ItemContainerStyle>
</controls:MasterDetailsView>每个foo都有一个单独的属性foo.Brush,我想使用它来绘制ListViewItem的背景。我想不出我需要在PathToFooBrushGoesHere中放什么才能让ListViewItem访问拥有Brush的foo的属性。
我的想法是,通过设置一个不同的DataContext,它可能是可行的,但我想不出如何能够以ListViewItem样式访问ItemTemplate的DataContext。
一个人应该如何进行这种造型?
发布于 2018-03-19 08:10:43
可以通过将Brush属性绑定到ItemTemplate of MasterDetailsView来实现此效果。
首先,将MasterDetailsView.ItemContainerStyle更改为:将ListViewItem的VerticalContentAlignment和HorizontalContentAlignment属性设置为Stretch,
<controls:MasterDetailsView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</controls:MasterDetailsView.ItemContainerStyle>然后将Brush属性绑定到ItemTemplate of MasterDetailsView。
<DataTemplate x:Key="ItemTemplate" x:DataType="local:Foo">
<Grid Background="{x:Bind Brush}">
<TextBlock Text="ItemTemplate"/>
</Grid>
</DataTemplate>https://stackoverflow.com/questions/49339161
复制相似问题