2013-09-25 3 views
4

У меня возникли проблемы с привязкой свойства видимости кнопки панели приложения. Я хочу привязать видимость кнопки панели приложения к другой видимости элемента. Если отображается другой элемент - панель видна.windows store apps Как связать видимость элемента панели?

Так вот мой код:

<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 в. Я даже пытался сделать то же самое связывание только с текстовым блоком, и он работал нормально. Я также попытался использовать конвертер на панели приложений (даже подумал, что мне не нужен), и я увидел, что отладчик не читал методы конвертера. Я видел, как некоторые люди писали подобные проблемы с панелью, но ничто из ответов не помогает мне. Кто-нибудь знает, как я могу это сделать? (Я не хочу использовать код для изменения видимости панели).

ответ

4

Я подозреваю, что элементы панели приложения не видят элементы страницы, и, следовательно, привязка элементов не работает. Я бы рекомендовал вам использовать независимое свойство, которое реализует интерфейс 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> 
Смежные вопросы