2010-06-17 7 views
27

में नेविगेशन बार को कैसे छिपाना है मैं WPF का उपयोग करके बनाए गए पृष्ठ में नेविगेशन बार को छिपाना चाहता हूं। मैंने ShowsNavigationUI = false की कोशिश की है, लेकिन यह अभी भी नियंत्रण प्रदर्शित कर रहा है।एक WPF पृष्ठ

उत्तर

16

एक पृष्ठ वस्तु पर ShowsNavigationUI = झूठी सेट करना इसे करना चाहिए। वहाँ एक बग होना प्रतीत होता है, तथापि, कि यह घटनाओं की कम से कम एक अनुक्रम में विफल हो जाएगा:

  1. पृष्ठ NavigationWindow में पहले से ही है जब इस सेट कर दिया जाता
  2. पृष्ठ दूर नेविगेट किया जाता है और फिर से वापस

अन्य परिदृश्य भी हो सकते हैं जो मैंने अभी तक नहीं चला है जो इसे विफल कर देता है।

इसे पूरी तरह से भरोसेमंद तरीके से काम करने के लिए, मैं जो करता हूं वह पृष्ठ को अनदेखा करता है। शोवॉविगेशनयूआई संपत्ति पूरी तरह से इसे नेविगेशनविंडो पर सेट करता है। यह पूरी तरह से विश्वसनीय लगता है।

यह इस तरह अपने पृष्ठ निर्माता में किया जा सकता है:

Dispatcher.BeginInvoke(ApplicationPriority.Render, new Action(() => 
{ 
    var navWindow = Window.GetWindow(this) as NavigationWindow; 
    if(navWindow!=null) navWindow.ShowsNavigationUI = false; 
})); 

आप ऐसा करते हैं तो किसी भी पृष्ठ वस्तु पर ShowsNavigationUI स्थापित करने के लिए नहीं याद है।

एफवाईआई, आप अपने नेविगेशन को भी पुनर्स्थापित कर सकते हैं किसी भी तरह से आप अपने ControlTemplate को बदलकर पसंद करते हैं। उदाहरण के लिए यह सब कुछ हटा देता है लेकिन वास्तविक पृष्ठ सामग्री:

<Style TargetType="{x:Type NavigationWindow}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type NavigationWindow}"> 

      <AdornerDecorator> 
      <ContentPresenter Name="PART_NavWinCP" 
           ClipToBounds="true"/> 
      </AdornerDecorator> 

     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 
+0

मैं ApplicationPriority नहीं मिल रहा। इसमें कौन सी कक्षा है? मेरे पास यही समस्या है लेकिन मेरे लिए यह यादृच्छिक है। – Paparazzi

+0

'DispatcherPriority.Loaded' द्वारा 'ApplicationPriority.Render' को बदलें –

3

केवल नेविगेशन विंडो के लिए काम करता है, लेकिन मैं सामान्य WPF विंडो का उपयोग कर रहा हूं। कुछ कहते हैं कि ये नेविगेशन विंडोज़ से बेहतर हैं। मैं अपने पृष्ठों को होस्ट करने के लिए डॉकपनेल का उपयोग कर रहा हूं। मेरा समाधान डॉकपैनल के लिए एक नया टेम्पलेट बनाता है और बस बटन नहीं जोड़ता है या उन्हें छुपाता है (स्टैकपैनल दृश्यता = "छिपी हुई" देखें)। यह अच्छी तरह से काम करता है।

<DockPanel>  
    <Frame x:Name="_mainFrame"> 
    <Frame.Template> 

     <ControlTemplate TargetType="Frame"> 
      <DockPanel Margin="7"> 
       <StackPanel Visibility="Hidden" 
        Margin="0" 
        Orientation="Horizontal" 
        DockPanel.Dock="Top" 
        > 
        <!--<Button 
         Content="Avast! Go back!" 
         Command="{x:Static NavigationCommands.BrowseBack}" 
         IsEnabled="{TemplateBinding CanGoBack}" 
         /> 
        <Button 
         Content="Forward you dogs!" 
         Command="{x:Static NavigationCommands.BrowseForward}" 
         IsEnabled="{TemplateBinding CanGoForward}" 
         />--> 
       </StackPanel> 

       <Border> 
        <ContentPresenter /> 
       </Border> 
      </DockPanel> 
     </ControlTemplate> 

     </Frame.Template> 
    </Frame> 
</DockPanel> 
+0

क्या यह आपके मुख्य पृष्ठ को खोलते समय पृष्ठों को गतिशील रूप से लोड और बंद करने की अनुमति देता है? स्पष्टता के लिए –

5

यह मुझे वास्तव में आसान मिला। अपने MainWindow में, इस कार्य करें:

public MainWindow() 
    public partial class MainWindow : NavigationWindow 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      ShowsNavigationUI = false; 
     } 
    } 
} 

और अगर आप बटन पर एक घटना है एक नया पृष्ठ को खोलने के लिए क्लिक करें, सिर्फ इस कार्य करें: यदि आप एक फ्रेम उपयोग कर रहे हैं

private void btnEndUserSearch_Click(object sender, RoutedEventArgs e) 
{ 
      EndUser EndUserSearchPage = new EndUser(); 
      this.NavigationService.Navigate(EndUserSearchPage); 
      EndUserSearchPage.ShowsNavigationUI = false; 
} 
+0

+1। – jogojapan

7

आप नेविगेशन बटन को हटाने के लिए फ्रेम की डिफ़ॉल्ट शैली को बदल सकते हैं (नीचे दिखाया गया है)। NavigationWindow के लिए एक ही दृष्टिकोण किया जा सकता है। मैंने मूल रूप से पेज को सेट करने का प्रयास किया। शोविगेशन यूआई और इसका कोई प्रभाव नहीं पड़ा। बस नीचे की शैली को संसाधन डिक्शनरी में जोड़ें और यह ठीक काम करता है।

<Style TargetType="{x:Type Frame}"> 
    <Setter Property="Control.Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Frame}"> 
     <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}"> 
      <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Name="PART_FrameCP" /> 
     </Border> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
68

सिर्फ आपके पृष्ठ कंटेनर में बताओ, तुम्हें नेविगेशन या बार नहीं करना चाहता, NavigationUIVisibility संपत्ति का उपयोग कर।

<Frame Margin="173,41,1,28" Name="frmPageContainer" NavigationUIVisibility="Hidden" Panel.ZIndex="1" > 

0

मैं जब भी मैं गतिशील रूप से एक फ्रेम की सामग्री संपत्ति बदल इस समस्या थी, और मेरे क्लिक() घटना में निम्न कोड का उपयोग करके इसे हल किया।

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden; 

जहां सामग्री फ्रेम फ्रेम का नाम है, जैसा कि एक्सएएमएल में परिभाषित किया गया है। यानी

<Frame x:Name="ContentFrame" /> 
22

यह कार्यान्वयन का एक बहुत ही आसान है।

यहाँ:

<Frame x:Name="_FrameName" NavigationUIVisibility="Hidden" /> 

:-P

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^