我正在尝试将 BottomAppBar 内部的元素绑定(bind)到它外部的元素。

这里有一个示例 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>

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

最佳答案

我没有胆量说它是错误,尽管我相信它是这样,但我解决了这个问题,它使我像一个星期一样滑行:

首先: 这不仅仅是 BottomAppBarTopAppBar 也有同样的问题。

第二个: 问题是 ElementName 绑定(bind)仅在您的源 Element 是 AppBars 内的一个 Element 时才起作用,这意味着:

  • 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>
    

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

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

    关于windows-8 - 数据绑定(bind)到 Page.BottomAppBar 中的 ElementName,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12772907/

    10-12 16:04