jya*_*ard 1 c# silverlight windows-phone-7
我在页面中有一个WebBrowser元素,我想在其中添加一个后退和前进按钮,并且当没有任何内容可以返回时将这些按钮禁用.
在Cocoa中,UIWebView有方法可以轻松检查:canGoBack和canGoForward,并且你可以使用goBack和goForward方法(以及重载等).
Android具有完全相同的方法名称.
我看到这些方法在.Net 4和3.5 SP1中可用.
我发现了一些关于在Silverlight中使用javascript命令的参考文献,但我发现这非常麻烦,而且无法检测历史记录中是否有任何内容(当然除非我自己管理)
当然,Windows Phone中有一些更先进的东西..
以下是我最终如何做到这一点.
假设您已设置a backButton
和forwardButton
; 这些按钮的状态将根据您在导航堆栈中的位置进行相应更新.
webView
是WebBrowser
对象
List<Uri> HistoryStack;
int HistoryStack_Index;
bool fromHistory;
// Constructor
public HelpView()
{
InitializeComponent();
HistoryStack = new List<Uri>();
HistoryStack_Index = 0;
fromHistory = false;
webView.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(WebView_Navigated);
UpdateNavButtons();
}
private void backButton_Click(object sender, RoutedEventArgs e)
{
if (HistoryStack_Index > 1)
{
HistoryStack_Index--;
fromHistory = true;
webView.Navigate(HistoryStack[HistoryStack_Index-1]);
updateNavButtons();
}
}
private void forwardButton_Click(object sender, RoutedEventArgs e)
{
if (HistoryStack_Index < HistoryStack.Count)
{
HistoryStack_Index++;
fromHistory = true;
webView.Navigate(HistoryStack[HistoryStack_Index-1]);
UpdateNavButtons();
}
}
private void UpdateNavButtons()
{
this.backButton.IsEnabled = HistoryStack_Index > 1;
this.forwardButton.IsEnabled = HistoryStack_Index < HistoryStack.Count;
}
private void WebView_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
if (!fromHistory)
{
if (HistoryStack_Index < HistoryStack.Count)
{
HistoryStack.RemoveRange(HistoryStack_Index, HistoryStack.Count - HistoryStack_Index);
}
HistoryStack.Add(e.Uri);
HistoryStack_Index++;
UpdateNavButtons();
}
fromHistory = false;
}
Run Code Online (Sandbox Code Playgroud)