【问题标题】:WPF page navigation in frames, how can I access my original frame from the page I navigated to?框架中的 WPF 页面导航,如何从导航到的页面访问我的原始框架?
【发布时间】:2015-12-13 19:09:24
【问题描述】:

我从 MainPage.xaml.cs 转到了一个名为 Einstellungen 的页面。

private void button_Copy_Click(object sender, RoutedEventArgs e)
{
    Einstellungen einstellungen = new Einstellungen();
    _mainFrame.Content = einstellungen;
}

MainPage.xaml 有一个名为 _mainFrame 的框架。 Button Einstellungen 将 _mainFrame 的 Content 设置为 Page Einstellungen

<Page
x:Class="ProjectMoralsKite.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ProjectMoralsKite"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStateGroup">
            <VisualState x:Name="_5__Phone">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowHeight="640" MinWindowWidth="360"/>
                </VisualState.StateTriggers>
            </VisualState>
            <VisualState x:Name="_6__Phone">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowHeight="768" MinWindowWidth="432"/>
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="textBlock.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>10,40,0,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="textBlock.(FrameworkElement.Width)" Value="412"/>
                    <Setter Target="button.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>10,251,0,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button.(FrameworkElement.Width)" Value="412"/>
                    <Setter Target="button_Copy.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>10,336,0,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button_Copy.(FrameworkElement.Width)" Value="412"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Width)" Value="412"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>10,421,0,0</Thickness>
                        </Setter.Value>
                    </Setter>
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="_8__Tablet">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowHeight="640" MinWindowWidth="1024"/>
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="button_Copy.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>370,258,362,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button_Copy.(FrameworkElement.HorizontalAlignment)" Value="Stretch"/>
                    <Setter Target="button_Copy.(FrameworkElement.Width)" Value="NaN"/>
                    <Setter Target="textBlock.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>10,40,10,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="textBlock.(FrameworkElement.HorizontalAlignment)" Value="Stretch"/>
                    <Setter Target="textBlock.(FrameworkElement.Width)" Value="NaN"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>0,397,34,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button_Copy1.(FrameworkElement.HorizontalAlignment)" Value="Right"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Width)" Value="292"/>
                    <Setter Target="button.(FrameworkElement.Height)" Value="206"/>
                    <Setter Target="button.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>48,142,0,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button.(FrameworkElement.Width)" Value="292"/>
                    <Setter Target="button_Copy.(FrameworkElement.Height)" Value="206"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Height)" Value="207"/>
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="_12__Tablet">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowHeight="960" MinWindowWidth="1440"/>
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="button_Copy.(FrameworkElement.Height)" Value="NaN"/>
                    <Setter Target="button_Copy.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>563,237,548,64</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button_Copy.(FrameworkElement.VerticalAlignment)" Value="Stretch"/>
                    <Setter Target="button_Copy.(FrameworkElement.HorizontalAlignment)" Value="Stretch"/>
                    <Setter Target="button_Copy.(FrameworkElement.Width)" Value="NaN"/>
                    <Setter Target="button.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>141,237,0,64</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button.(FrameworkElement.VerticalAlignment)" Value="Stretch"/>
                    <Setter Target="button.(FrameworkElement.Height)" Value="NaN"/>
                    <Setter Target="button.(FrameworkElement.Width)" Value="329"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>0,237,123,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="button_Copy1.(FrameworkElement.HorizontalAlignment)" Value="Right"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Width)" Value="329"/>
                    <Setter Target="button_Copy1.(FrameworkElement.Height)" Value="659"/>
                    <Setter Target="textBlock.(FrameworkElement.Margin)">
                        <Setter.Value>
                            <Thickness>10,40,10,0</Thickness>
                        </Setter.Value>
                    </Setter>
                    <Setter Target="textBlock.(FrameworkElement.HorizontalAlignment)" Value="Stretch"/>
                    <Setter Target="textBlock.(FrameworkElement.Width)" Value="NaN"/>
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Frame x:Name="_mainFrame" Background="#FF0070B7">
        <Grid>
            <Button x:Name="button" Content="&#xD;&#xA;Aufträge&#xD;&#xA;" HorizontalAlignment="Left" Margin="10,251,-275.333,-165" VerticalAlignment="Top" Height="80" Width="340" d:LayoutOverrides="LeftMargin, RightMargin, TopMargin, BottomMargin, TopPosition, BottomPosition"/>
            <TextBlock x:Name="textBlock" TextAlignment="Center" HorizontalAlignment="Left" Margin="10,40,-278.333,-58" TextWrapping="Wrap" Text="ProjectMoralsKite" VerticalAlignment="Top" Height="48" Width="340" FontSize="29.333" d:LayoutOverrides="LeftMargin, RightMargin, TopMargin, BottomMargin, LeftPosition, RightPosition"/>
            <Button x:Name="button_Copy" Content="Einstellungen" HorizontalAlignment="Left" Margin="10,336,-275.333,-250" VerticalAlignment="Top" Height="80" Width="340" Click="button_Copy_Click" d:LayoutOverrides="LeftPosition, RightPosition, TopPosition, BottomPosition"/>
            <Button x:Name="button_Copy1" Content="Über" HorizontalAlignment="Left" Margin="10,421,-275.333,-335" VerticalAlignment="Top" Height="80" Width="340" d:LayoutOverrides="LeftMargin, RightMargin, TopMargin, BottomMargin"/>
        </Grid>
    </Frame>


</Grid>

namespace ProjectMoralsKite
{

// Eine leere Seite, die eigenständig verwendet werden kann oder auf die innerhalb eines Rahmens navigiert werden kann.
// </summary>
public sealed partial class Einstellungen : Page
{

    public Einstellungen()
    {
        this.InitializeComponent();
    }

    public string foregroundProperty { get; set; }

    private void button_Click(object sender, RoutedEventArgs e)
    {


        if(radioButton.IsChecked == true)
        {
            Color black = Color.FromArgb(255, 0, 0, 0);
            SolidColorBrush brush1 = new SolidColorBrush(black);
            textBlock.Foreground = brush1;
            textBlock1.Foreground = brush1;
            radioButton.Foreground = brush1;
            radioButton1.Foreground = brush1;





            //here I want to set the Page of the frame to MainPage.xaml!!!



        }
        else if (radioButton1.IsChecked == true)
        {
            Color white = Color.FromArgb(255, 255, 255, 255);
            SolidColorBrush brush2 = new SolidColorBrush(white);
            textBlock.Foreground = brush2;
            textBlock1.Foreground = brush2;
            radioButton.Foreground = brush2;
            radioButton1.Foreground = brush2;

            //here I want to set the Page of the frame to MainPage.xaml!!!
        }





    }
}

}

现在我在 Einstellungen 中有一个按钮,它应该使框架的内容再次变为 MainPage。但是在我的 Einstellungen.xaml.cs 文件中,我当然不能访问我的_mainFrame!我该怎么做?

【问题讨论】:

    标签: c# windows-10 win-universal-app


    【解决方案1】:

    您可以通过Windows.UI.Xaml.Window.Current.Content 访问根框架。请注意,在 MainPage 中添加到 XAML 的不是您的框架。它是应用程序根框架。但是您可以使用它来获取根框架的内容。

    var rootFrame = Window.Current.Content as Frame;
    var mainPage = rootFrame.Content as MainPage;
    var yourFrame = mainPage.Content as Frame; //here I'm not sure because I don't see whole XAML of MainPage
    

    导航你应该使用Navigate方法。

    _mainFrame.Navigate(typeof(Einstellungen));
    

    最后一件事:WPF != win-universal-app 你应该详细说明你的问题

    【讨论】:

    • 我添加了整个 MainPage.xaml 和 Einstellungen.xaml.cs,因为我目前不明白。谢谢你的回答。
    • 啊。我得到了它!这样就可以了:var rootFrame = Window.Current.Content as Frame; var mainPage = rootFrame.Content as MainPage; rootFrame.Navigate(typeof(MainPage));
    【解决方案2】:
    var rootFrame = Window.Current.Content as Frame;
    var mainPage = rootFrame.Content as MainPage;
    rootFrame.Navigate(typeof(MainPage));
    

    这样就可以了。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      相关资源
      最近更新 更多