Ich habe einen contentEditable
basierten Editor innerhalb einer WebView
in meiner Windows Store App. Bestimmte Tastenkombinationen und Tasten können dazu führen, dass sich MessageDialog
öffnet. Wenn dieser Dialog geschlossen wird, hat der Editor keinen Fokus mehr. Ich habe versucht, den Fokus auf jede mir bekannte Weise zu setzen, und es wird nicht funktionieren. Hier ist eine Beispiel-App.Fokussieren eines WebView nach einem MessageDialog ist geschlossen
MainPage.xaml
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView x:Name="Editor" Margin="200"></WebView>
</Grid>
<Page.BottomAppBar>
<CommandBar x:Name="CommandBar_Editor" Visibility="Visible">
<AppBarButton Label="Debug" Icon="Setting">
<AppBarButton.Flyout>
<MenuFlyout>
<MenuFlyoutItem Text="show dialog, then focus" Click="MenuFlyoutItem_Click_1"/>
</MenuFlyout>
</AppBarButton.Flyout>
</AppBarButton>
</CommandBar>
</Page.BottomAppBar>
</Page>
MainPage.xaml.cs
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
Editor.NavigateToString("<script type='text/javascript'>function focus_please(){ document.getElementById('editor').focus(); }</script><div id='editor' contentEditable='true'>It was the best of times, it was the worst of times</div>");
}
private async void MenuFlyoutItem_Click_1(object sender, RoutedEventArgs e)
{
MessageDialog dialog = new MessageDialog("this should set focus to editor on close", "test");
UICommand okCommand = new UICommand("OK");
dialog.Commands.Add(okCommand);
IUICommand response = await dialog.ShowAsync();
if (response == okCommand)
{
Editor.Focus(FocusState.Programmatic);
// I've also tried:
// FocusState.Keyboard
// FocusState.Pointer
// FocusState.Unfocused
// this calls JS within the HTML to focus the contentEditable div
await Editor.InvokeScriptAsync("focus_please", null);
}
}
}
Es scheint mir, dass die WebView
fokussiert wird, aber nicht der HTML-Inhalt innerhalb
Aktualisierung:
Mein Beispiel wurde aktualisiert, um den Code von Bryan aus der Antwort unten hinzuzufügen, aber es funktioniert immer noch nicht.
Hinweis Nachdem der MessageDialog beendet ist, wenn ich Tab
zweimal drücke, wird der Editor wieder aktiv.
Update 2:
Bryans Antwort unten tut Arbeit, wenn über den Touchscreen zu navigieren. Wenn Sie jedoch Maus und Tastatur verwenden, wird das Element contentEditable
nicht fokussiert. Ich habe ein Kopfgeld auf diese Suche nach einer Lösung, die das Objekt fokussiert entweder bei Verwendung des Touchscreens oder der Maus/Tastatur Combo gesetzt
Ich habe versucht, den Inhalt in der Webansicht Fokussierung und die Webansicht selbst, arbeiten sie weder einzeln noch zusammen – roryok
Was Javascript haben Sie versucht? –
Ich habe 'document.getElementById ('editor') ausprobiert. Focus()', Ich habe jquery's '$ (" # editor "). Focus()' versucht und ich habe versucht, window.location.hash einzustellen wie du oben getan hast. (Es ist auch * eine Geschichte von zwei Städten! *) – roryok