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

时间:2015-05-21 05:34:20

标签: c# xaml win-universal-app

我是xaml或wpf的新手,我正在尝试使用Windows 10 Universal App。

我想做的很简单。

我发现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 Universal App编程的一些指导/教程/介绍,您可以指点我,这将非常受欢迎。

已经看过/阅读过关于网络和复数的wpf的一些教程,但我发现它们与Windows 10 UAP有所不同,我需要能够解释其基础知识的东西。

1 个答案:

答案 0 :(得分:1)

Button的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时,后退按钮变暗,但您可以通过将Opacity设置为Disabled状态来更改ForwardButtonStyle(从app.xaml中的BackButtonStyle复制)。设置不透明度比折叠元素更有效,但您可以这样做。不透明度也可以动画。

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