Содержимое окна появляется одновременно с содержимым страницы: WPF - PullRequest
0 голосов
/ 04 мая 2020

Я действительно новичок в программировании, поэтому сталкиваюсь с множеством ошибок.

В следующем решении у меня одна идентификация Окно и одно обновление информации пользователя Страница , когда я нажимаю кнопку идентификации Окно Содержимое окна и содержимое страницы появляются одновременно, это то, чего я не хочу и не могу исправить. Что я хочу, так это: когда пользователь нажимает кнопку идентификации Окно , содержимое окна должно отображать только содержимое страницы. Большое спасибо за вашу помощь!

Окно XML Код:

<Grid HorizontalAlignment="Center"
                VerticalAlignment="Center" 
                Margin="0,8" Width="385" >
        <Frame x:Name="Main"/>

        <StackPanel Margin="10 10 10 20" 
                    Orientation="Vertical"
                    VerticalAlignment="Center"
                    HorizontalAlignment="Center"
                    Width="357">
            <Label Content="User Name:"/>
            <TextBox Margin="0,0,3,0"/>
            <Label Content="Your Password"/>
            <PasswordBox Margin="0,0,3,0"/>
            <StackPanel Orientation="Horizontal" 
                        HorizontalAlignment="Center" 
                        Margin="10">
                <Button x:Name="ForUpdate"
                        Content="Match"
                        Click="Update"/>
            </StackPanel>
        </StackPanel>
    </Grid>

Обработчик события кнопки C# Код:


    private void Update(object sender, RoutedEventArgs e)
     {
        Main.Content = new UpdateCio();
     }

Страница XML Код:

<Grid>
    <StackPanel HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Label Content="this is test!"/>
    </StackPanel>
</Grid>

1 Ответ

0 голосов
/ 05 мая 2020

Насколько я понимаю, вы пытаетесь использовать фрейм, в который вы помещаете страницу, чтобы не открывать новое окно.

Для того, чтобы страница появилась в фрейме, вы предполагаете, для использования метода «Навигация» не устанавливайте свойство содержимого (https://docs.microsoft.com/fr-fr/dotnet/api/system.windows.controls.frame?view=netcore-3.1). (В противном случае, если вы просто хотите установить содержимое, вы должны использовать ContentPresenter).

Таким образом, обновление будет выглядеть так:

private void Update(object sender, RoutedEventArgs e)
    {
        Main.Navigate(new UpdateCio());
    }

То, что это говорит о том, что страница "UpdateCio.xaml "должно быть показано внутри фрейма:

<Frame x:Name="Main"/>

Он не заменит оставшуюся часть кода xaml, который вы определили, поэтому он появится позади другой stackPanel.

Вы можете изменить положение th Frame и xaml UpdateCio, так что он появляется сверху и скрывает остальную часть окна за ним. (Немного странно).

Или вы действительно можете использовать «Рамки и страницы» и навигационную систему и определить главное окно, в котором будут отображаться разные страницы).

MainWindow.xaml

<Grid HorizontalAlignment="Center"
            VerticalAlignment="Center" >
    <Frame x:Name="Main"/>
</Grid>

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        //Set the initial page (you could also do it in xaml by setting the Source property of the Frame
        Main.Navigate(new IdentificationPage());
    }
}

IdentificationPage.xaml (xaml, который вы имели в своем Окне минус Фрейм + становится Страницей вместо Окна).

<Grid>
    <StackPanel Margin="10 10 10 20" 
                Orientation="Vertical"
                VerticalAlignment="Center"
                HorizontalAlignment="Center"
                Width="357">
        <Label Content="User Name:"/>
        <TextBox Margin="0,0,3,0"/>
        <Label Content="Your Password"/>
        <PasswordBox Margin="0,0,3,0"/>
        <StackPanel Orientation="Horizontal" 
                    HorizontalAlignment="Center" 
                    Margin="10">
            <Button x:Name="ForUpdate"
                    Content="Match"
                    Click="Update"/>
        </StackPanel>
    </StackPanel>
</Grid>

IdentificationPage.xaml.cs:

public partial class IdentificationPage : Page
{
    public IdentificationPage()
    {
        InitializeComponent();
    }

    private void Update(object sender, RoutedEventArgs e)
    {
        //From a page, you have to use "NavigationService to Navigate"
        //(the .Navigate method appear only if the class inherits from Page)
        NavigationService.Navigate(new UpdateCio());
    }
}

UpdateCio.xaml, который по-прежнему является страницей, а не окном (это то, что сначала запутало меня):

<Grid>
    <StackPanel HorizontalAlignment="Center"
            VerticalAlignment="Center">
        <Label Content="this is test!"/>
    </StackPanel>
</Grid>

UpdateCio.xaml.cs:

public partial class UpdateCio : Page
{
    public UpdateCio()
    {
        InitializeComponent();
    }
}

Дайте мне знать, какое решение вы выбрали в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...