xamarin.forms - 无法绑定 Xamarin WebView CanGoBack
问题描述
Xamain.Forms 绑定 CanGoBack 和 CanGoForward 会引发错误:CanGoBack 不可访问。
它似乎适用于旧版本的 VS。
编辑:完整代码如下。
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="WebViewDemo.WebViewDemoPage">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness" iOS="10, 20, 10, 0" Android="10, 0" WinPhone="10, 0" />
</ContentPage.Padding>
<StackLayout>
<Entry Keyboard="Url" Placeholder="web address" Completed="OnEntryCompleted" /> <StackLayout Orientation="Horizontal" BindingContext="{x:Reference webView}">
<Button Text="⇐" FontSize="Large" HorizontalOptions="FillAndExpand" IsEnabled="{Binding CanGoBack}" Clicked="OnGoBackClicked" />
<Button Text="⇒" FontSize="Large" HorizontalOptions="FillAndExpand" IsEnabled="{Binding CanGoForward}" Clicked="OnGoForwardClicked" />
</StackLayout>
<WebView x:Name="webView" VerticalOptions="FillAndExpand" Source="https://xamarin.com" />
</StackLayout>
</ContentPage>
代码背后
public partial class WebViewDemoPage : ContentPage
{
public WebViewDemoPage()
{
InitializeComponent();
}
void OnEntryCompleted(object sender, EventArgs args)
{
webView.Source = ((Entry)sender).Text;
}
void OnGoBackClicked(object sender, EventArgs args)
{
webView.GoBack();
}
void OnGoForwardClicked(object sender, EventArgs args)
{
webView.GoForward();
}
}
任何想法如何正确绑定它?
谢谢你。
解决方案
我知道这个问题有点老了,但我想如果有人(比如我)需要解决这个问题,我会分享我的解决方案。
我通过完全放弃 Binding 并使用 PropertyChanged 事件解决了这个问题WebView
:
在内容页面中:
<ContentPage>
<StackLayout Margin="2">
<StackLayout Orientation="Horizontal">
<Button x:Name="btnBack"
Text="Back"
HorizontalOptions="Start"
Clicked="OnBackButtonClicked"
IsEnabled="False" />
<Button x:Name="btnForward"
Text="Fwd"
HorizontalOptions="End"
Margin="5"
Clicked="OnForwardButtonClicked"
IsEnabled="False" />
</StackLayout>
<Label x:Name="labelLoading" Text="Loading..." IsVisible="false" />
<WebView x:Name="webView"
WidthRequest="1000"
HeightRequest="1000"
Navigated="WebViewNavigated"
Navigating="WebViewNavigating"
PropertyChanged="WebView_PropertyChanged"/>
</StackLayout>
</ContentPage>
在后面的代码中:
private void WebViewNavigated(object sender, WebNavigatedEventArgs e)
{
labelLoading.IsVisible = false;
}
private void WebViewNavigating(object sender, WebNavigatingEventArgs e)
{
labelLoading.IsVisible = true;
}
private void WebView_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "CanGoBack":
btnBack.IsEnabled = ((WebView)sender).CanGoBack;
break;
case "CanGoForward":
btnForward.IsEnabled = ((WebView)sender).CanGoForward;
break;
}
}
我希望这可以帮助某人...
推荐阅读
- c# - 无法从 PowerBuilder 访问 C# DLL 函数
- docker - 在 DockerFile 中执行 RUN 命令时权限被拒绝
- java - Android Studio 菜单图标不是应有的颜色
- apostrophe-cms - 如何在登录时更改我的撇号密码
- c++ - 使用具有浮点边缘权重的 cpp boost maximum_weighted_matching 算法的问题
- windows - Minikube 服务未显示
- r - 我需要找出在 R 中绘制 3 张具有相同颜色的卡片的概率
- html - 如果未定义高度,为什么 background-size contains 在 HTML 或 BODY 上不起作用,但 background-size cover 有效?
- c# - WPF 使用数据/设置 ItemsSource 填充 Datagrid 的 DataGridCheckBoxColumn
- reactjs - 添加公共路线和私人路线应用程序后无法正常工作