未应用WPF绑定 - 为什么会发生

时间:2016-10-25 12:39:08

标签: c# wpf xaml

我想通过datatrigger更新我的绑定的字符串格式。所以我想到了这样做:

<TextBlock Text="{Binding Foo.Name}" Margin="3">
                  <TextBlock.Style>
                    <Style TargetType="TextBlock">
                      <Setter Property="Text" Value="{Binding Path=., StringFormat='Start {0}'}" />
                      <Style.Triggers>
                        <DataTrigger Binding="{Binding Foo.IsEnabled}" Value="True">
                        <Setter Property="Text" Value="{Binding Path=., StringFormat='Stop {0}'}" />
                      </DataTrigger>
                      </Style.Triggers>
                    </Style>
                  </TextBlock.Style>
                </TextBlock>

现在这只显示了Foo.Name的值,而不是应用了字符串格式('start'/'stop'字符串)。

我修改了代码,让它运行起来。这是工作代码:

        <TextBlock Margin="3">
          <TextBlock.Style>
            <Style TargetType="TextBlock">
              <Setter Property="Text" Value="{Binding Foo.Name, StringFormat='Start {0}'}" />
              <Style.Triggers>
                <DataTrigger Binding="{Binding Foo.IsEnabled}" Value="True">
                  <Setter Property="Text" Value="{Binding Foo.Name, StringFormat='Stop {0}'}" />
                </DataTrigger>
              </Style.Triggers>
            </Style>
          </TextBlock.Style>
        </TextBlock>

现在我正在寻找第一段代码不起作用的原因以及第二段代码的工作原因。 我在DataTemplates中看到了类似的行为,我无法通过DataTrigger中的Setter设置或更改属性值,因为该属性已经通过对象本身的属性直接设置。只有当我从对象本身中删除属性并将其设置为它工作的样式时。

或者这仅仅是WPF的限制?

1 个答案:

答案 0 :(得分:1)

我不会称之为限制,它已经记录在案。依赖项属性具有值优先级。 https://msdn.microsoft.com/en-us/library/ms743230(v=vs.110).aspx