C# 从父级继承前景值,就像UWP中的TextBlock一样
当我在my中设置SelectedForeground时,item DataTemplate中的TextBlock会按预期更改所选内容的颜色。我希望将相同的颜色应用于DataTemplate中的其他元素,例如路径或矩形:C# 从父级继承前景值,就像UWP中的TextBlock一样,c#,xaml,uwp,uwp-xaml,C#,Xaml,Uwp,Uwp Xaml,当我在my中设置SelectedForeground时,item DataTemplate中的TextBlock会按预期更改所选内容的颜色。我希望将相同的颜色应用于DataTemplate中的其他元素,例如路径或矩形: <ListView.ItemTemplate> <DataTemplate> <Grid> <TextBlock Text="Hello" /> <Pat
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="Hello" />
<Path Fill={?} />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
我尝试创建自定义控件并应用模板:
<ControlTemplate x:Key="myControlTemplate" TargetType="local:myControl">
<Grid>
<TextBlock Text="Hello" />
<Path Fill="{Binding Foreground, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</ControlTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<controls:myControl Template="{StaticResource myControlTemplate}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
在这种情况下,路径确实从ListViewItemPresenter继承了该值,但只继承了一次-当选择更改时,它不会更新该值
如何强制Path.Fill属性像TextBlock一样更新其颜色?在
ControlTemplate
中,“模板化父对象”是控件本身,因此在混合中添加自定义控件不会有任何帮助
你可能想要的是这个。我不能在UWP中测试它,所以如果有任何错误,请告诉我
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="Hello" />
<Path
x:Name="MyPath"
Fill="YellowGreen"
Data="M 0,0 L 16,0 L 16,16 L 0,16 Z"
/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger
Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem}}"
Value="True">
<Setter
TargetName="MyPath"
Property="Fill"
Value="{Binding SelectedForeground, RelativeSource={RelativeSource AncestorType=ListView}}"
/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListView.ItemTemplate>
您可以直接在listView的项目模板中使用relativeSource
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Rectangle Width="24"
Height="24"
Fill="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"/>
<TextBlock Text="{Binding}"
x:Name="TitleBlock"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
将UpdateSourceTrigger=PropertyChanged
添加到Path.Fill
上的绑定时,您的理由是什么?没有什么特别的原因,我只是多次尝试让它工作。恐怕UWP中不支持DataTrigger和AncestorType。我可以尝试使用元素名查找ListViewItem,尽管我希望避免这种情况。myControl的基类是Control,它包含前台属性。我希望它能自动继承ListViewItem的值,就像TextBlock一样。谢谢,这正是我想要的!