2013-09-25 133 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>