我在绑定appbar按钮的visibility属性时遇到了一些问题。 我想将appbar按钮可见性绑定到另一个元素可见性。 如果另一个元素可见 - 则可以看到appbar。
所以这是我的代码:
<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按钮的可见性没有反应。我甚至试图用一个文本块做同样的绑定,它工作得很好。我也尝试在appbar上使用转换器(即使我认为我不需要),我看到调试器没有读取转换器的方法。我看到更多的人写了类似的appbar问题,但没有任何答案对我没有帮助。有人知道我该怎么办? (我不想使用后面的代码来更改appbar的可见性。)
答案 0 :(得分: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>