4

我正在尝试将 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 可见?

4

3 回答 3

1

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

第一:这不只是针对BottomAppBarTopAppBar遭受同样的问题。

第二:问题是ElementName绑定仅在您的源元素是位于其中一个 AppBars 内的元素时才有效,这意味着:

  • 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 从外部看到的唯一内容是DataContextPage元素,因此考虑在 DataContext 中使用支持属性来处理所有这些,这对我来说很好。

于 2014-01-21T17:21:39.277 回答
0

它不起作用,因为“文本”文本框与按钮位于不同的可视树中,所以按钮不知道“文本”。这种绑定是不可能直接进行的,但有解决方案。

于 2014-08-06T20:28:17.050 回答
-1

你能试试这个

<Button Content="{Binding Path=text.Text}" Click="Button_Click_1"></Button>
于 2012-10-08T04:53:40.440 回答