2014-01-28 15 views
-1

從獲得一點幫助,我設法讓窗口只打開一次,現在我想將窗口更改爲一個頁面。當我這樣做明顯.Show();.Close();沒有擴展方法。在C#中查找Xaml中的x:名稱

現在我添加了一個框架,以我的一般網頁(因爲這將是對所有形式):

<Frame x:Name="FrameNavigate" HorizontalAlignment="Left" Height="300" Margin="1296,52,0,0" VerticalAlignment="Top" Width="300" NavigationUIVisibility="Hidden"/> 

我把x:Name"FrameNavigate"在XAML。在通用頁面後面的代碼中,我想添加這段代碼以在框架上打開頁面。

private void btnHelp_Click(object sender, RoutedEventArgs e) 
{ 
    if (help != null) 
    { 
     help.Close(); 
     help = null; 
    } 
    else 
    { 
     help = new xamlHelp(); 
     FrameNavigate.Navigate(new xamlHelp()); 
    } 
} 

但它說FrameNavigate不存在?

編輯:

<Style TargetType="{x:Type local:Master}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:Master}"> 
       <StackPanel> 
        <Canvas Height="50" Margin="0,0,0,0" HorizontalAlignment="Stretch" FlowDirection="RightToLeft"> 
         <Canvas.Background> 
          <LinearGradientBrush EndPoint="0,0" StartPoint="0,1"> 
           <GradientStop Color="#FFB3DDF2" Offset="1.0"/> 
           <GradientStop Color="#FFD6E9F4" Offset="0.0"/> 
          </LinearGradientBrush> 
         </Canvas.Background> 
         <Button x:Name="btnHelp" Content="Help" Click="btnHelp_Click" Foreground="#FF7E8385" FontFamily="Calibri" FontSize="18" Margin="110,10,0,0" Height="30" Width="70" Style="{x:Null}" BorderBrush="Transparent" Background="Transparent" Cursor="Hand"/> 
         <GridSplitter Height="30" Width="1" Margin="95,10,0,0" Background="Gray"/> 
         <Button x:Name="btnSettings" Content="Settings" Foreground="#FF7E8385" FontFamily="Calibri" FontSize="18" Margin="10,10,0,0" Click="btnSettings_Click" Height="30" Width="70" Style="{x:Null}" BorderBrush="Transparent" Background="Transparent" Cursor="Hand"/> 
        </Canvas> 
        <Canvas Width="350" Height="850" Margin="0,0,0,0" VerticalAlignment="Stretch" HorizontalAlignment="Left" FlowDirection="RightToLeft" DockPanel.Dock="Bottom"> 
         <Canvas.Background> 
          <LinearGradientBrush EndPoint="0,0" StartPoint="0,1"> 
           <GradientStop Color="#FFD6E9F4" Offset="1.0"/> 
           <GradientStop Color="White" Offset="0.0"/> 
          </LinearGradientBrush> 
         </Canvas.Background> 
         <Frame x:Name="FrameNavigate" HorizontalAlignment="Left" Height="300" Margin="1296,52,0,0" VerticalAlignment="Top" Width="300" NavigationUIVisibility="Hidden"/> 
        </Canvas> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

編輯:

我有這樣的代碼已經有沒有錯誤,但是當你點擊出現的按鈕什麼?

Master master = ((Button)sender).TemplatedParent as Master; 
Frame frame = (Frame)master.Template.FindName("FrameNavigate",master); 
frame.Navigate(new xamlHelp()); 
+0

你能後的完整代碼的頁面(XAML和代碼隱藏)? – BenjaminPaul

+0

可能的重複[如何訪問x:代碼中的名稱屬性 - 對於非FrameworkElement對象?](http://stackoverflow.com/questions/7172030/how-to-access-xname-property-in-code-for -non-frameworkelement-objects) –

+0

頁面和框架都是框架元素?這是如何重複的? – BenjaminPaul

回答

1

更新:

引導(類型名)方法採用一個類型的對象!

Frame frame = (Frame)this.FindName("FrameNavigate"); 
frame.Navigate(typeof(xamlHelp)); //frame.Navigate(help); 

看一看: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.frame.navigate.aspx

,並在: http://msdn.microsoft.com/en-us/library/windows/apps/hh771188.aspx

PS。請注意,您在其他代碼塊中沒有使用您的help變量。

+0

你不應該這樣做 – BenjaminPaul

+0

@FredrikRedin'對象實例沒有設置到'frame.Navigate(help)對象''任何想法? – Ben

+0

@BenjaminPaul我同意你的意見,這只是一個建議。 – Fredrik

2

由於Frame存在於ControlTemplate中,因此您無法從後面的代碼直接訪問它。

問問題模板,通過使用FrameworkTemplate.FindName方法得到它。

你也需要得到Master控制(明顯得到主控的模板),你可以通過accessing TemplatedParent of sender button得到。

這是你需要怎麼做:

Master master = ((Button)sender).TemplatedParent as Master; 
Frame frame = (Frame)master.Template.FindName("FrameNavigate", master); 
frame.Navigate(new xamlHelp()); 
+0

我明白了,你在哪裏添加了'btn1'我以爲你的意思是我的按鈕?如果是這樣,那就錯誤了。 – Ben

+0

我編輯了答案。請檢查。它應該是主控制的實例。 –

+0

那位代碼在我添加Master時仍然錯誤,說這是一個類型,但是像變量一樣使用。 – Ben