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的可视后代,然后您就知道绑定是有效的。