C# 祖先绑定在ListView中只工作一次

C# 祖先绑定在ListView中只工作一次,c#,wpf,xaml,binding,ancestor,C#,Wpf,Xaml,Binding,Ancestor,我的窗口中有一个样式。参考资料: <Style x:Key="Header" TargetType="GridViewColumnHeader"> <Setter Property="Content"> <Setter.Value> <StackPanel Orientation="Horizontal"> <Label Width

我的窗口中有一个样式。参考资料:

<Style x:Key="Header" TargetType="GridViewColumnHeader">
        <Setter Property="Content">
            <Setter.Value>
                <StackPanel Orientation="Horizontal">
                    <Label Width="80" HorizontalContentAlignment="Center" Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GridViewColumnHeader, AncestorLevel=1}, Path=Tag}" />
                    <StackPanel Orientation="Vertical">
                        <Polygon Name="P_up" Points="0,5 10,5, 5,0" Stroke="Black" Fill="Black" Margin="3" Visibility="Visible"/>
                        <Polygon Name="P_down" Points="0,0 10,0, 5,5" Stroke="Black" Fill="Black" Margin="3" Visibility="Hidden"/>
                    </StackPanel>
                </StackPanel>
            </Setter.Value> 
        </Setter>
        <EventSetter Event="Click" Handler="Header_Click"/>
    </Style>

当我将此样式设置为我的ListView(GridViewColumnHeader)时,如下所示:

<ListView Height="300" x:Name="lv" ItemsSource="{Binding PLCs}">
        <ListView.View>
            <GridView>
                <GridViewColumn Width="120">
                    <GridViewColumnHeader Name="myNewText" Tag="test" Style="{StaticResource Header}"/>
                </GridViewColumn>
                <GridViewColumn Width="120">
                    <GridViewColumnHeader Name="myNewText2" Tag="test2"  Style="{StaticResource Header}"/>
                </GridViewColumn>
                <GridViewColumn Width="120">
                    <GridViewColumnHeader Tag="test32"  Style="{StaticResource Header}"/>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>        

与祖先标记的绑定有效,并且显示了多边形,但仅对于GridViewColumns中的最后一列,前两列保持空白。谁能告诉我我做错了什么?因为这三列的代码都是一样的,所以我认为这三列的结果都是一样的。我猜标签的内容绑定样式目标类型不正确


感谢您的帮助。

您应该使用
ContentTemplate
属性:

<Setter Property="ContentTemplate">
    <Setter.Value>
         <DataTemplate>
          <! -- ...place your stack panel here -->
         </DataTemplate>
    </Setter.Value>
</Setter>

您应该使用
ContentTemplate
属性:

<Setter Property="ContentTemplate">
    <Setter.Value>
         <DataTemplate>
          <! -- ...place your stack panel here -->
         </DataTemplate>
    </Setter.Value>
</Setter>

附加信息:默认情况下,对ressource的每个请求都共享同一个实例(这就是为什么只有一个
StackPanel
)。你可以通过使用。但我不建议在
样式上使用这种方法。多边形是视觉效果。您尝试多次使用它们的同一实例,并且一个视觉对象只能有一个父对象。模板化会根据使用情况生成一个实例。@Andy,你确实想评论OP的问题,而不是我的答案。无论如何,这不是因为多边形。从OP的标记中删除它们-问题仍然存在。阅读我的答案。其他信息:默认情况下,对ressource的每个请求都共享同一个实例(这就是为什么只有一个
StackPanel
)。你可以通过使用。但我不建议在
样式上使用这种方法。多边形是视觉效果。您尝试多次使用它们的同一实例,并且一个视觉对象只能有一个父对象。模板化会根据使用情况生成一个实例。@Andy,你确实想评论OP的问题,而不是我的答案。无论如何,这不是因为多边形。从OP的标记中删除它们-问题仍然存在。读我的答案。