数据绑定到Page.BottomAppBar中的ElementName

时间:2012-10-07 21:13:37

标签: windows-8 windows-runtime winrt-xaml

我正在尝试将BottomAppBar中的元素绑定到它之外的元素。

这是一个XAML示例,用于阐明:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <TextBox x:Name="text" MinWidth="200" MinHeight="40" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
<Page.BottomAppBar>
    <AppBar>
        <StackPanel Orientation="Horizontal">
            <Button Content="{Binding Text, ElementName=text}" Click="Button_Click_1"></Button>
            <Button Content="{Binding Text, ElementName=text2}" Click="Button_Click_1"></Button>
            <TextBox x:Name="text2" MinWidth="200" MinHeight="40" VerticalAlignment="Center" HorizontalAlignment="Center"/>
        </StackPanel>
    </AppBar>
</Page.BottomAppBar>

第一个按钮永远不会更新(它绑定的文本框在BottomAppBar之外),但是,第二个按钮会按照您的预期更新。如何使页面对BottomAppBar可见?

3 个答案:

答案 0 :(得分:1)

我没有勇气说出它的Bug,虽然这就是我的信念,但是我解决了这个问题,这个问题让我感觉像是一个星期:

首先:这不仅适用于BottomAppBarTopAppBar也遇到同样的问题。

第二:问题是ElementName绑定仅在源元素是其中一个AppBar内的元素时起作用,这意味着:

  • BottomAppBar(目标)到TopAppBar(来源):工作
  • BottomAppBar(目标)到BottomAppBar(来源):工作
  • TopAppBar(目标)到BottomAppBar(来源):工作
  • TopAppBar(目标)到TopAppBar(来源):工作
  • TopAppBar(目标)到two AppBars以外的某些内容(来源):不工作
  • BottomAppBar(目标)到two AppBars以外的某些内容(来源):不工作

示例:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <TextBox x:Name="text" MinWidth="200" MinHeight="40" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
<Page.TopAppBar>
    <AppBar>
        <StackPanel Orientation="Horizontal">
            <Button Content="{Binding Text, ElementName=text}" Click="Button_Click_1"></Button>
            <Button Content="{Binding Text, ElementName=text2}" Click="Button_Click_1"></Button>
            <TextBox x:Name="text3" MinWidth="200" MinHeight="40" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox x:Name="text3" MinWidth="200" MinHeight="40" VerticalAlignment="Center" HorizontalAlignment="Center"/>

        </StackPanel>
    </AppBar>
</Page.TopAppBar>
<Page.BottomAppBar>
    <AppBar>
        <StackPanel Orientation="Horizontal">
            <Button Content="{Binding Text, ElementName=text}" Click="Button_Click_1"></Button>
            <Button Content="{Binding Text, ElementName=text3}" Click="Button_Click_1"></Button>
            <TextBox x:Name="text2" MinWidth="200" MinHeight="40" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox x:Name="text3" MinWidth="200" MinHeight="40" VerticalAlignment="Center" HorizontalAlignment="Center"/>

        </StackPanel>
    </AppBar>
</Page.BottomAppBar>

AppBars中第一个按钮的内容不会显示任何内容,但两个AppBars的第二个按钮都会正确显示。

我发现AppBar从外面看到的唯一东西是根DataContext元素的Page,因此考虑在DataContext中使用支持属性来处理所有这些,这个对我来说很好。

答案 1 :(得分:0)

它不起作用,因为“text”TextBox与按钮位于不同的可视树中,因此按钮不知道“text”。这样的绑定是不可能的,但存在解决方案。

答案 2 :(得分:-1)

你能试试吗

<Button Content="{Binding Path=text.Text}" Click="Button_Click_1"></Button>