Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将触发器内的setter值绑定到元素_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 将触发器内的setter值绑定到元素

C# 将触发器内的setter值绑定到元素,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我想在扩展器关闭时给它一个不同的头。当该值为常量时,一切正常,但当我尝试将标题绑定到控件中的DP(例如,Presenter)时,它不起作用。以下是我的简化标记: <UserControl x:Class="MyProject.Views.PlanDisplayer" xmlns=... xmlns:local="clr-namespace:MyProject.Views" x:Name="This">

我想在
扩展器关闭时给它一个不同的头。当该值为常量时,一切正常,但当我尝试将标题绑定到控件中的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>

...
...

尝试使用相同的
文本块
并对其应用
样式

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


您能否确认您是否实际绑定到
事件
?嗯,是的。可能会被认为我要参加一个活动。谢谢mm8。它是有效的,但是您能解释一下为什么要这样重新构造标记吗?我想学习规则。这仅仅是因为DataTrigger能够绑定到元素吗?基本上是因为同一个TextBlock始终是UserControl的可视后代,然后您就知道绑定是有效的。