diff --git a/core/modules/views/config/schema/views.display.schema.yml b/core/modules/views/config/schema/views.display.schema.yml
index 3e696143f1..56150f583f 100644
--- a/core/modules/views/config/schema/views.display.schema.yml
+++ b/core/modules/views/config/schema/views.display.schema.yml
@@ -68,6 +68,9 @@ views.display.page:
         menu_name:
           type: string
           label: 'Menu name'
+    always_use_admin_theme:
+      type: boolean
+      label: 'Always use admin theme'
 
 views.display.block:
   type: views_display
diff --git a/core/modules/views/src/Plugin/views/display/Page.php b/core/modules/views/src/Plugin/views/display/Page.php
index baf1434449..75f071748a 100644
--- a/core/modules/views/src/Plugin/views/display/Page.php
+++ b/core/modules/views/src/Plugin/views/display/Page.php
@@ -93,6 +93,13 @@ protected function getRoute($view_id, $display_id) {
     // Explicitly set HTML as the format for Page displays.
     $route->setRequirement('_format', 'html');
 
+    // Add the _admin_route option only if always_use_admin_theme display option
+    // is TRUE. Otherwise, let other modules or alters to make a decision.
+    // @see \Drupal\system\EventSubscriber\AdminRouteSubscriber::alterRoutes()
+    if ($this->getOption('always_use_admin_theme')) {
+      $route->setOption('_admin_route', TRUE);
+    }
+
     return $route;
   }
 
@@ -151,6 +158,7 @@ protected function defineOptions() {
         'weight' => ['default' => 0],
       ],
     ];
+    $options['always_use_admin_theme'] = ['default' => FALSE];
 
     return $options;
   }
@@ -230,6 +238,10 @@ public function optionsSummary(&$categories, &$options) {
       $options['menu']['setting'] = $this->t('Parent menu item');
       $options['menu']['links']['tab_options'] = $this->t('Change settings for the parent menu');
     }
+
+    if ($this->getOption('always_use_admin_theme')) {
+      $options['path']['value'] .= ' ' . $this->t('(Using admin theme)');
+    }
   }
 
   /**
@@ -442,6 +454,14 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
           ],
         ];
         break;
+      case 'path':
+        $form['always_use_admin_theme'] = [
+          '#type' => 'checkbox',
+          '#title' => $this->t('Always use admin theme'),
+          '#description' => $this->t('Paths starting with "admin/" use the admin theme even when this option is not checked.'),
+          '#default_value' => $this->getOption('always_use_admin_theme'),
+        ];
+        break;
     }
   }
 
@@ -491,6 +511,9 @@ public function submitOptionsForm(&$form, FormStateInterface $form_state) {
       case 'tab_options':
         $this->setOption('tab_options', $form_state->getValue('tab_options'));
         break;
+      case 'path':
+        $this->setOption('always_use_admin_theme', $form_state->getValue('always_use_admin_theme'));
+        break;
     }
   }
 
diff --git a/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php b/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
index 501d9226ee..6b86c356bc 100644
--- a/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
@@ -147,6 +147,30 @@ public function testPagePaths() {
     $this->assertPagePath('9999');
   }
 
+  /**
+   * Tests the 'admin_theme' page display option.
+   */
+  public function testAdminTheme() {
+    $account = $this->drupalCreateUser(['view the administration theme']);
+    $this->drupalLogin($account);
+
+    // Use distinct default and administrative themes for this test.
+    $this->container->get('theme_handler')->install(['seven']);
+    $this->config('system.theme')->set('admin', 'seven')->save();
+
+    // Check that the page has been served with the default theme.
+    $this->drupalGet('test_page_display_200');
+    $this->assertSession()->responseNotContains('seven/css/base/elements.css');
+
+    $view = $this->config('views.view.test_page_display');
+    $view->set('display.page_3.display_options.always_use_admin_theme', TRUE)->save();
+    $this->container->get('router.builder')->rebuild();
+
+    // Check that the page was served with the administrative theme.
+    $this->drupalGet('test_page_display_200');
+    $this->assertSession()->responseContains('seven/css/base/elements.css');
+  }
+
   /**
    * Tests that we can successfully change a view page display path.
    *
diff --git a/core/modules/views/tests/src/Functional/Update/AlwaysUseAdminThemeOptionUpdateTest.php b/core/modules/views/tests/src/Functional/Update/AlwaysUseAdminThemeOptionUpdateTest.php
new file mode 100644
index 0000000000..18c7f67079
--- /dev/null
+++ b/core/modules/views/tests/src/Functional/Update/AlwaysUseAdminThemeOptionUpdateTest.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Drupal\Tests\views\Functional\Update;
+
+use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+
+/**
+ * Tests the addition of the admin theme option for views with page displays.
+ *
+ * @group views
+ */
+class AlwaysUseAdminThemeOptionUpdateTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * Tests views_post_update_always_use_admin_theme().
+   *
+   * @see views_post_update_always_use_admin_theme()
+   */
+  public function testViewsPostUpdateEnforceAdminTheme() {
+    $options = $this->config('views.view.content')
+      ->get('display.page_1.display_options');
+    // Check that always_use_admin_theme option doesn't exist in 'content' view.
+    $this->assertArrayNotHasKey('always_use_admin_theme', $options);
+
+    // Run updates.
+    $this->runUpdates();
+
+    $options = $this->config('views.view.content')
+      ->get('display.page_1.display_options');
+    // Check that always_use_admin_theme option was added in 'content' view.
+    $this->assertArrayHasKey('always_use_admin_theme', $options);
+    // Check that always_use_admin_theme option is FALSE.
+    $this->assertFalse($options['always_use_admin_theme']);
+  }
+
+}
diff --git a/core/modules/views/views.post_update.php b/core/modules/views/views.post_update.php
index b0734478b6..b7bbbfe016 100644
--- a/core/modules/views/views.post_update.php
+++ b/core/modules/views/views.post_update.php
@@ -346,3 +346,25 @@ function views_post_update_table_display_cache_max_age(&$sandbox = NULL) {
 
   $sandbox['#finished'] = empty($sandbox['views']) ? 1 : ($sandbox['count'] - count($sandbox['views'])) / $sandbox['count'];
 }
+
+/**
+ * Add administrative theme option for views with page displays.
+ */
+function views_post_update_enforce_admin_theme() {
+  $config_factory = \Drupal::configFactory();
+  foreach ($config_factory->listAll('views.view.') as $name) {
+    $view = $config_factory->getEditable($name);
+    $changed = FALSE;
+    foreach ($view->get('display') as $display_id => $display) {
+      // Deal only with page displays.
+      if ($display['display_plugin'] == 'page') {
+        $trail = "display.$display_id.display_options.always_use_admin_theme";
+        $view->set($trail, FALSE)->save();
+        $changed = TRUE;
+      }
+    }
+    if ($changed) {
+      $view->save();
+    }
+  }
+}
