Binding =“{Binding(0)}”是什么意思?

时间:2014-02-19 11:30:37

标签: wpf expression-blend controltemplate datatrigger ribbon-control

我发现了这个:

<DataTrigger Value="True" Binding="{Binding (0)}">

触发RibbonMenuButton模板。这是什么意思?我试过谷歌,但一无所获。

UPD更多代码:

<ControlTemplate x:Key="RibbonMenuButtonControlTemplate1" TargetType="{x:Type RibbonMenuButton}">
...
    <DataTrigger Binding="{Binding (0)}" Value="True">
        <Setter Property="TextElement.Foreground" TargetName="MainGrid" Value="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
        <Setter Property="PathFill" TargetName="TwoLineText" Value="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
        <Setter Property="CornerRadius" TargetName="OuterBorder" Value="0"/>
        <Setter Property="Background" TargetName="OuterBorder" Value="Transparent"/>
        <Setter Property="BorderBrush" TargetName="OuterBorder" Value="Transparent"/>
    </DataTrigger>
...

RibbonMenuButton控件上按下“编辑模板”按钮后,在Blend中创建此代码。

3 个答案:

答案 0 :(得分:3)

它看起来像一个bug。据我所知,在WPF中不能是Binding这种类型。以下是缺陷列表,请注意引自connect.microsoft.comarchive)的第一段:

  

我正在尝试设置色带控件的样式   (System.Windows.Controls.Ribbon)我一直遇到问题。

     
      
  • 如果我使用Blend或其他工具复制功能区的默认模板,RibbonGroup,RibbonTab等,这些模板都有   错误。 {Binding (0)}等绑定。

  •   
  • 我无法更改功能区控件的高度。

  •   
  • 无法更改RibbonGroup的模板,更改分隔符的外观以及将标题放入   小组的左上角。

  •   
  • 无法向ApplicationMenuButton添加标签。此外,此按钮具有固定的宽度。

  •   
  • 我无法删除功能区控件底部的边框。

  •   

据我了解,没有修补程序。

答案 1 :(得分:3)

唯一可以出现的时间是tokenized path format。请参阅Storyboards Overview中“间接定位”下的代码示例。但是,在XAML代码中,它无效。我想象发生的事情是这样的:

// something goes wrong here, and GetProperties returns an empty array
var propertyChain = GetProperties();

var path = new PropertyPath("(0)", propertyChain);

trigger.Binding = new Binding { Path = path };

使用空PathParameters,XAML生成器可能会转储原始标记化路径。

答案 2 :(得分:1)

很抱歉将此作为答案,但它不适合发表评论。

你给我们的背景仍然太少了,不过这是我的猜测。

它是一个占位符。占位符在wpf世界中很少见,但很有用。这就是我现在想到的所有信息,包括你给我们的信息。它是唯一对我有意义的东西。

我见过几个占位符。这是一个聪明的主意。

通常,如果您有许多不同的主题和不同的资源名称,您最终将创建这样的占位符,这些占位符将在构建前或构建时完成xaml文件。

意味着您点击构建操作,在编译之后或之前,xaml文件将被合并,并且编写该功能区的人员提供的工具将被执行以注入适当的主题资源名称而不是占位符。

可以放置任何东西而不是占位符......

你从哪里获得那些代码?您可以使用Snoop工具查看什么是DataContext?

请为我们提供更多背景信息。

我建议您在运行时将模板转储到文件中,然后您就会知道发生了什么。

以下是:

var stringBuilder = new StringBuilder();
var xmlSettings = new XmlWriterSettings
{
  Indent = true
};

using (var xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings))
{
  XamlWriter.Save(controlName.Template, xmlWriter);
}

如果在运行时转储到文件中的模板中没有(0),那么您将知道它是一个固定的占位符。 :) :) :))

请你测试一下,告诉我们。