Привязка предков работает только один раз в ListView - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть Стиль в моем Window.Resources:

<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>        

Привязка к предкам Tag работает и Polygon s показаны, но только для последнего из GridViewColumns ,первые два остаются пустыми.Может кто-нибудь сказать мне, что я делаю не так?Поскольку код одинаков для всех трех столбцов, я предположил, что он даст одинаковые результаты для всех трех.Я предполагаю, что привязка Content Label или TargetType Style не верна.

Спасибоза вашу помощь.

1 Ответ

0 голосов
/ 11 декабря 2018

Вы должны использовать свойство ContentTemplate:

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

При этом вы определяете шаблон для каждого заголовка столбца.Шаблон будет создавать экземпляр содержимого для каждого заголовка столбца независимо.

Если вы используете свойство Content, вы устанавливаете ту же панель стека, что и содержимое, для всех заголовков столбцов.Это не сработает - победит только последний.Родитель панели стека будет автоматически установлен на последний заголовок.Это как:

header1.Content = your_stack_panel;
your_stack_panel.Parent = header1;

header2.Content = your_stack_panel;
your_stack_panel.Parent = header2;

header3.Content = your_stack_panel;
your_stack_panel.Parent = header3;
...