如何将可见性绑定到Frame.CanGoForward

本文关键字:Frame CanGoForward 绑定 可见性 | 更新日期: 2023-09-27 17:50:16

我是xaml或wpf的新手,我正在尝试Windows 10通用应用程序。

我想做的很简单。

我发现Frame有一个属性叫CanGoForward。我想让一个按钮在属性为真时可见,在属性为假时折叠。

我创建了这样一个转换器:

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (parameter != null && parameter.ToString() == "Collapsed")
            return Visibility.Collapsed;
        if (parameter != null && parameter.ToString() == "invert") value = !((bool)value);
        return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
    }
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        if (parameter != null && parameter.ToString() == "Collapsed")
            return false;
        var result = value is Visibility && (Visibility)value == Visibility.Visible;
        if (parameter != null && parameter.ToString() == "invert") result = !result;
        return result;
    }
}

定义在页面资源上,如:

<Page.Resources>
    <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Page.Resources>

,按钮的xaml是:

<Button x:Name="button" 
                Visibility="{Binding CanGoForward, Converter={StaticResource BooleanToVisibilityConverter}}"
                Content="Button" HorizontalAlignment="Left" Margin="59,142,0,0" VerticalAlignment="Top" Click="button_Click" />

但是这没有任何作用,按钮总是可见的。这是我第一次使用xaml,所以我敢肯定我做了一些奇怪的事情,有些概念遗漏了。

如果有(也许还没有)一些关于Windows 10通用应用程序编程的指导/教程/介绍,你可以指给我看,那将是非常受欢迎的。

已经在网上和pluralsight上看到/阅读了一些关于wpf的教程,但我发现它们与Windows 10 UAP不同,我需要一些解释最基本的东西

如何将可见性绑定到Frame.CanGoForward

按钮的DataContext可能不是Frame,所以您绑定到CanGoForward上的某个未知对象(来自代码片段)。如果您将DataContext设置为具有适当CanGoForward属性的控件,则您的代码看起来应该可以工作。

也就是说,这样做的典型方法是绑定到Command,而不是直接管理可见性。这是在https://github.com/Microsoft/Windows-universal-samples/tree/master/xaml_xamluibasics的Xaml UI Basics示例中的后退按钮演示的(该代码的Windows 8.1版本是使用Basic Page模板生成的,默认情况下包含在Grid App和Split App模板中)。GoForewardCommand在Common/NavigationHelper.cs文件中定义,并使用Common/RelayCommand.cs

<Button x:Name="forwardButton" Height="48" Width="48" FontSize="20" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
        Style="{StaticResource ForwardButtonStyle}" 
        Command="{x:Bind GoForwardCommand}" 
        AutomationProperties.Name="Forward" 
        AutomationProperties.AutomationId="ForwardButton" 
        AutomationProperties.ItemType="Navigation Button" 
/> 

默认情况下,当它被GoBackCommand从CanExecute返回false禁用时,后退按钮变暗,但你可以在你的ForwardButtonStyle(从app.xaml中的BackButtonStyle复制)中通过设置不透明度为Disabled状态来改变它。设置不透明度比折叠元素更有效,但你也可以这样做。不透明度也可以动画化。

<VisualState x:Name="Disabled">
    <VisualState.Setters>
        <Setter Target="ContentPresenter.Opacity" Value="0.0" />
    </VisualState.Setters>
</VisualState>