如何在WPF绑定路径中转义斜杠字符,或者如何解决这个问题?

9
我是一名学习WPF的初学者,我从数据源中拖动了一个表格到窗口上,这样就为每一列生成了XAML代码。但是其中一些列的名称导致了以下问题:
<DataGridTextColumn x:Name="_Rev_UnitColumn" Binding="{Binding Path=Rev/Unit}" Header="Rev/Unit" Width="SizeToHeader" />

这会导致该列变为空白(就像我一样)。

你看过这个网址吗?{} http://msdn.microsoft.com/en-us/library/ms744986.aspx - cordialgerm
3个回答

6
在MSDN上,有一个关于属性路径的文章,其中有一个关于转义字符的部分:

在索引器([ ])中,插入符号(^)转义下一个字符。

你必须转义(使用XML实体)某些对于XML语言定义来说是特殊的字符。使用&来转义"&"字符。使用>来转义结束标签">"。

你必须转义(使用反斜杠\)某些对于WPF XAML解析器行为来说是特殊的字符,以便处理标记扩展。

  • 反斜杠(\)是转义字符本身。
  • 等号(=)分隔属性名和属性值。
  • 逗号(,)分隔属性。
  • 右大括号(})是标记扩展的结尾。

这里没有列出斜杠,因此我不知道反斜杠转义是否有效,但您可以尝试一下。

(你究竟如何拥有这样的属性名?它似乎在XML和C#中都是非法的)


它来自于 SQL Server 视图中的列名。 - Aaron Anodide

6

我(有点随意地)尝试了:

<DataGridTextColumn x:Name="_Rev_UnitColumn" Binding="{Binding Path=[Rev/Unit]}" Header="Rev/Unit" Width="SizeToHeader" />

结果一切都按照我的预期运行。再看一遍,我想H.B.的MSDN引用告诉了我这一点。当我阅读原始内容时(最初在MSDN上,甚至在我发布这个问题之前),我就不理解“在索引器内部——逗号——插入符号(^)转义下一个字符”是什么意思。


我最近遇到了类似的问题。只是为了完整起见,关于逗号和插入符号的事情是,如果您的列名中包含逗号,您可以通过以下方式转义逗号:Binding={Binding Path=[Hello^, World]} - Arturo Torres Sánchez

0

如果您需要使用冒号字符:来掩盖路径,可以尝试使用括号字符(path)

示例用法

<Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="materialDesign:ButtonAssist.CornerRadius" Value="24"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Border CornerRadius="{Binding (materialDesign:ButtonAssist.CornerRadius), RelativeSource={RelativeSource AncestorType=Button}}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接