样式不适用于 ListView 中的 StackPanel 项目 - Windows 通用
Style doesn't apply to StackPanel items in ListView - Windows Universal
我创建了一个带有数据绑定的列表视图和一个 "Itemstemplate",它采用 "Datatemplate",其中我有一个 Stackpannel,但样式不适用于 Stackpannel,没有 space 在堆栈面板中的文本块之间:
<ListView Grid.Row="1" DataContext="{Binding Source={StaticResource ViewModel}}" ItemsSource="{Binding}" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Gray" >
<StackPanel.Resources>
<Style TargetType="TextBlock" x:Key="margintextblock">
<Setter Property="Margin" Value="10,0,0,0"/>
</Style>
</StackPanel.Resources>
<TextBlock Style="{StaticResource listviewtextblock}" Text="{Binding Path=Firstname}" Foreground="Gold"></TextBlock>
<TextBlock Style="{StaticResource listviewtextblock}" Text="{Binding Path=Lastname}" Foreground="Black"></TextBlock>
<TextBlock Style="{StaticResource listviewtextblock}" Text="{Binding Path=Id}" Foreground="OrangeRed"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
怎么了?
您必须删除 x:Key="margintextblock"
因为这个样式不会自动应用到 TextBlocks
通过在样式上设置 x:Key 属性,您告诉 WPF 只有当您在特定控件上显式引用它时才想使用该样式。
已编辑
而且您还有另一个问题 - 您正在为您的 TextBlocks 设置样式 Style="{StaticResource listviewtextblock}"
在这种情况下,您需要做的是从 listviewtextblock 样式继承 StackPanel TextBlock 样式
<StackPanel.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource listviewtextblock}">
<Setter Property="Margin" Value="10,0,0,0"/>
</Style>
</StackPanel.Resources>
并从 TextBlocks
中删除样式 Style="{StaticResource listviewtextblock}"
你的代码应该是这样的
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Gray" >
<StackPanel.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource listviewtextblock}" >
<Setter Property="Margin" Value="10,0,0,0"/>
</Style>
</StackPanel.Resources>
<TextBlock Text="{Binding Path=Firstname}" Foreground="Gold"></TextBlock>
<TextBlock Text="{Binding Path=Lastname}" Foreground="Black"></TextBlock>
<TextBlock Text="{Binding Path=Id}" Foreground="OrangeRed"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
我创建了一个带有数据绑定的列表视图和一个 "Itemstemplate",它采用 "Datatemplate",其中我有一个 Stackpannel,但样式不适用于 Stackpannel,没有 space 在堆栈面板中的文本块之间:
<ListView Grid.Row="1" DataContext="{Binding Source={StaticResource ViewModel}}" ItemsSource="{Binding}" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Gray" >
<StackPanel.Resources>
<Style TargetType="TextBlock" x:Key="margintextblock">
<Setter Property="Margin" Value="10,0,0,0"/>
</Style>
</StackPanel.Resources>
<TextBlock Style="{StaticResource listviewtextblock}" Text="{Binding Path=Firstname}" Foreground="Gold"></TextBlock>
<TextBlock Style="{StaticResource listviewtextblock}" Text="{Binding Path=Lastname}" Foreground="Black"></TextBlock>
<TextBlock Style="{StaticResource listviewtextblock}" Text="{Binding Path=Id}" Foreground="OrangeRed"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
怎么了?
您必须删除 x:Key="margintextblock"
因为这个样式不会自动应用到 TextBlocks
通过在样式上设置 x:Key 属性,您告诉 WPF 只有当您在特定控件上显式引用它时才想使用该样式。
已编辑
而且您还有另一个问题 - 您正在为您的 TextBlocks 设置样式 Style="{StaticResource listviewtextblock}"
在这种情况下,您需要做的是从 listviewtextblock 样式继承 StackPanel TextBlock 样式
<StackPanel.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource listviewtextblock}">
<Setter Property="Margin" Value="10,0,0,0"/>
</Style>
</StackPanel.Resources>
并从 TextBlocks
中删除样式Style="{StaticResource listviewtextblock}"
你的代码应该是这样的
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Gray" >
<StackPanel.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource listviewtextblock}" >
<Setter Property="Margin" Value="10,0,0,0"/>
</Style>
</StackPanel.Resources>
<TextBlock Text="{Binding Path=Firstname}" Foreground="Gold"></TextBlock>
<TextBlock Text="{Binding Path=Lastname}" Foreground="Black"></TextBlock>
<TextBlock Text="{Binding Path=Id}" Foreground="OrangeRed"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>