Перейдите к другому wpf, не открывая новый windows - PullRequest
1 голос
/ 02 апреля 2020

Я новичок в WPF, я не могу найти способ открыть новое окно WPF в том же основном приложении WPF, которое я пробовал, используя метод Frame, вот код: -

<Window x:Class="WPF_FINAL.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF_FINAL"
        mc:Ignorable="d"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        TextElement.Foreground="{DynamicResource MaterialDesignBody}"
        TextElement.FontWeight="Regular"
        TextElement.FontSize="13"
        TextOptions.TextFormattingMode="Ideal"
        TextOptions.TextRenderingMode="Auto"
        Background="{DynamicResource MaterialDesignPaper}"
        Height="768"
        Width="1366"
        WindowState="Maximized"
        Title="MainWindow">

    <Grid Background="#dff9fb"
          Margin="33,10,-33,-10">

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20" />
            <ColumnDefinition Width="13.5" />
            <ColumnDefinition Width="152" />
            <ColumnDefinition Width="auto"
                              MinWidth="335.5" />
            <ColumnDefinition />
            <ColumnDefinition Width="20" />
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="20" />
            <RowDefinition Height="auto" />
            <RowDefinition Height="auto" />
            <RowDefinition Height="auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="20" />
        </Grid.RowDefinitions>
        <Frame Margin="0,0,0.5,10"
               Grid.ColumnSpan="5"
               x:Name="main"
               Grid.RowSpan="6">

        </Frame>
    </Grid>
</Window>

cs code

            main.Content = new Window1();

но когда я запускаю, это дает мне исключение перерыва, я пробовал также навигационный сервис, но я обнаружил, что он связан только со страницами. Есть ли предложения, как это сделать? спасибо

1 Ответ

0 голосов
/ 02 апреля 2020

A Frame может содержать любой контент, даже HTML.
Page предоставляет только специальных помощников, таких как NavigationService, для удобства навигации по страницам.

A Window can not be the child of another element e.g. child of Frame . It must be the root element. By assigning the Window to Frame.Content the Frame beceomes the parent of the Window`, что недопустимо.

Простым решением будет преобразование класса Window1 в UserControl:

<UserControl x:Class="MyUserControl">
  <TextBlock Text="TEST CONTROL" FontSize="25"/>
</UserControl>

Теперь ваше задание будет работать:

main.Content = new MyUserControl();

или

main.Navigate(new MyUserControl());

или

main.Navigate("file path to/MyUserControl.xaml");
...