2013-09-25 51 views
4

我在绑定应用程序按钮的可见性属性时遇到了一些问题。 我想将appbar按钮可见性绑定到另一个元素可见性。 如果另一个元素是可见的 - 那么appbar是可见的。Windows应用商店应用如何绑定应用商品的可见性?

因此,这里是我的代码:

<common:LayoutAwarePage.BottomAppBar> 
    <AppBar> 
     <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> 
      <Button Visibility="{Binding ElementName=btnSave, Path=Visibility}" 
        Click="Edit_Click" /> 
      ...(more buttons) 
     </StackPanel> 
    </AppBar> 
</common:LayoutAwarePage.BottomAppBar> 

<Button Grid.Row="7" Grid.Column="0" 
    x:Name="btnSave" 
    Content="Save" 
    Style="{StaticResource EditModeButtonStyle}" 
    Click="Save_Click" /> 

我改变在后面的代码btnSave的知名度和在appbar按钮的知名度没有反应。我甚至试图用textblock做同样的绑定,并且它工作正常。我也尝试在应用栏上使用转换器(甚至认为我不需要),我看到调试器没有读取转换器的方法。我看到更多的人写了类似的appbar问题,但没有答案没有帮助我。有人知道我该怎么做? (我不想用后面的代码来改变appbar的可见性)。

回答

4

我怀疑appbar元素没有看到页面的元素,因此元素绑定不起作用。我会建议你使用实现INotifyPropertyChanged接口的独立属性。将该属性绑定到您要为其设置可见性的那些元素。

C#

public sealed partial class BlankPage4 : Page, INotifyPropertyChanged 
{ 
    private Visibility _IsHide; 
    public Visibility IsHide 
    { 
     get { return _IsHide; } 
     set 
     { 
      _IsHide = value; 
      OnPropertyChanged("IsHide"); 
     } 
    } 

    public BlankPage4() 
    { 
     this.InitializeComponent(); 
     DataContext = this; 
    } 

    private void btnHideAll_Click(object sender, RoutedEventArgs e) 
    { 
     IsHide = Visibility.Collapsed; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 

XAML

<Page.BottomAppBar> 
    <AppBar IsSticky="True" IsOpen="True"> 
     <StackPanel Orientation="Horizontal"> 
      <Button x:Name="btnHello" Visibility="{Binding IsHide}" Content="Hello" /> 
      <TextBlock Visibility="{Binding IsHide}" Text="Hello" FontSize="20"/> 
     </StackPanel> 
    </AppBar> 
</Page.BottomAppBar> 

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel> 
     <Button x:Name="btnSave" Visibility="{Binding IsHide}" Content="Save" /> 
     <Button Content="Hide All" Click="btnHideAll_Click" /> 
    </StackPanel> 
</Grid>