【问题标题】:What does Binding="{Binding (0)}" mean?Binding="{Binding (0)}" 是什么意思?
【发布时间】:2014-03-19 16:56:05
【问题描述】:

我发现了这个:

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

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

更新更多代码:

<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 中创建。

【问题讨论】:

  • 你确定绑定没有StingFormat吗?你能发布参考吗?
  • 是的,我很确定。这是完整的 xaml。
  • 请您发布更多代码或上下文。
  • 添加代码到问题

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


【解决方案1】:

它看起来像一个错误。据我所知,在WPF中不能是Binding这种类型。下面列出不足之处,请注意第一段,引用自connect.microsoft.com(archive):

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

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

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

  • 无法更改 RibbonGroup 的模板、更改分隔符的外观并将标题放在 组的左上角。

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

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

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

【讨论】:

  • 这是调用XamlWriter.Save(controlName.Template, xmlWriter);后的代码吗???
  • @dev Hedgehog:不,这是ControlTemplate的来源。
  • 呵呵,XamlWriter能运行一下吗,如果你的VS能打开项目请保存。
  • @dev Hedgehog:很遗憾,我下面有一个工作室版本,它不会打开它。
  • 原始 MSFT 链接已失效,因此我添加了指向存档副本的链接
【解决方案2】:

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

您提供给我们的上下文仍然太少,但这是我的猜测。

它是某事的占位符。占位符在 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),那么您将知道它是一个该死的占位符。 :) :) :)

请您测试一下并告诉我们。

【讨论】:

  • 据我了解,没有DataContext。您可以通过单击我的回答(附件中的RibbonTest2.zip)中的 connect.microsoft.com 链接来查看完整代码。
  • 由于某种原因,当我打开该解决方案时,我的 VS 崩溃了。您可以尝试使用我发布的代码在运行时保存模板吗?让我知道它看起来有多像。找出 Binding (0) 是什么会很有趣。对我来说,它似乎是一个占位符。 ribbontest2 解决方案中有很多 Binding (0) 吗?
【解决方案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 生成器可能会转储原始标记化路径。

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 2013-01-04
    • 2012-02-16
    • 2015-05-09
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2011-12-20
    • 2015-03-20
    相关资源
    最近更新 更多