Привязка установочного значения внутри триггера к элементу - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу дать другой заголовок для Expander, когда он закрыт. Когда значение постоянное, все работает хорошо, но когда я пытаюсь привязать заголовок к DP (например, Presenter) в моем элементе управления, это не работает. Вот моя упрощенная разметка:

<UserControl x:Class="MyProject.Views.PlanDisplayer"
             xmlns=...
             xmlns:local="clr-namespace:MyProject.Views"
             x:Name="This">
    <Grid>
        ...
        <Expander>
            <Expander.Style>
                <Style TargetType="Expander" BasedOn="{StaticResource ResourceKey=ChildExpanderStyle}">
                    <Setter Property="Header">
                        <Setter.Value>
                            <!--Works-->
                            <TextBlock Text="{Binding ElementName=This, Path=Presenter.Walls.Count, StringFormat='Walls:  [{0}]'}"/>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsExpanded" Value="False">
                            <Setter Property="Header">
                                <Setter.Value>
                                    <!--Doesn't work → Error: 4 : Cannot find source for binding-->
                                    <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=local:PlanDisplayer, Mode=FindAncestor}, Path=Presenter.Walls.Count, StringFormat='Walls  [{0}]'}"/>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Expander.Style>

            ...
        </Expander>
    </Grid>
</UserControl>

1 Ответ

0 голосов
/ 05 ноября 2018

Попробуйте использовать тот же TextBlock и применить к нему Style:

<Style TargetType="Expander">
    <Setter Property="Header">
        <Setter.Value>
            <TextBlock>
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Setter Property="Text" Value="{Binding ElementName=This, Path=Presenter.Walls.Count, StringFormat='Walls:  [{0}]'}}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType=Expander}}" Value="True">
                                <Setter Property="Text" Value="{Binding Path=Presenter.Walls.Count, StringFormat='Walls  [{0}]'}, RelativeSource={RelativeSource AncestorType=UserControl}}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </Setter.Value>
    </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...