如何从另一个引用一个XAML对象值?

时间:2015-12-23 12:37:28

标签: c# xaml

XAML能够构建C#对象的树,就像在代码中一样;然而,虽然我可以实例化对象没有问题,但我仍然坚持使用语法初始化一个到另一个的值(如果这是可能的话)。

为了说明,请考虑以下毫无意义的例子:

<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyClass">

    <x:String x:Name="MyString">Hello</x:String>

    <x:String x:Name="MyString2">STUCK FOR SYNTAX HERE</x:String>

字符串被实例化。我可以在调试器中看到它们,我可以编写代码来操作它们,就好像它们是C#代码的正常部分一样。我的问题是:我可以使用第一个字符串'Hello'的值来初始化第二个字符串吗?或者,更一般地说,我可以从另一个XAML对象访问一个XAML对象的值吗?

希望这是有道理的。

1 个答案:

答案 0 :(得分:2)

您的代码段无法编译。你的问题的答案是否定的,并在这里走出困境,但你可能会滥用XAML。正如丹尼斯在评论中所说,你应该使用数据绑定。与您尝试做的最接近的事情是:

<Window ....
        xmlns:sys="clr-namespace:System;assembly=mscorlib" >
    <Window.Resources>
        <system:String x:Key="MyString">Hello</system:String>
        <system:String x:Key="MyString2">STUCK FOR SYNTAX HERE</system:String>
    </Window.Resources>
    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} - {1}">
                <Binding Source="{StaticResource MyString}" />
                <Binding Source="{StaticResource MyString2}" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Window>

以下代码将在文本块中显示“Hello - STUCK FOR SYNTAX HERE”。

您无法在XAML中连接字符串的原因是因为您实际上正在初始化不支持任何其他类型标记的System.String