如何将可见性绑定到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不同,我需要一些解释最基本的东西
按钮的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>