2010-06-17 39 views

Trả lời

16

Đặt chương trìnhKhông xác địnhUI = false trên đối tượng Trang nên làm điều đó. Hiện không có vẻ là một lỗi, tuy nhiên, điều đó sẽ gây ra điều này thất bại trong ít nhất một chuỗi các sự kiện:

  1. trang là đã có trong NavigationWindow khi điều này được thiết lập
  2. Trang là lái đi và ngược lại

Có thể có các tình huống khác mà tôi chưa gặp phải khiến nó không thành công.

Để làm điều này hoạt động hoàn toàn đáng tin cậy, điều tôi làm là bỏ qua thuộc tính Page.ShowsNavigationUI một cách hoàn toàn và đặt nó thay thế trên NavigationWindow. Điều này có vẻ hoàn toàn đáng tin cậy.

Sau đây là cách này có thể được thực hiện trong constructor trang của bạn:

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

Nếu bạn làm điều này, hãy nhớ không đặt ShowsNavigationUI trên trang bất kỳ đối tượng.

FYI, bạn cũng có thể chỉnh sửa NavigationWindow theo bất kỳ cách nào bạn muốn bằng cách thay đổi ControlTemplate của nó. Ví dụ: thao tác này sẽ xóa mọi thứ trừ nội dung trang thực tế:

<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

tôi không thể tìm ApplicationPriority. Lớp học là gì? Tôi có vấn đề tương tự nhưng đối với tôi nó là ngẫu nhiên. – Paparazzi

+0

Thay đổi 'ApplicationPriority.Render' bằng 'DispatcherPriority.Loaded' –

3

Chỉ hoạt động trên các cửa sổ Điều hướng, nhưng tôi đang sử dụng các cửa sổ WPF thông thường. Một số người nói đây là tốt hơn so với cửa sổ Navigation. Tôi đang sử dụng DockPanel để lưu trữ các trang của mình. Giải pháp của tôi tạo ra một mẫu mới cho DockPanel và đơn giản là không thêm các nút hoặc làm cho chúng ẩn đi (xem StackPanel Visibility = "Hidden"). Nó hoạt động độc đáo.

<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

điều này cho phép bạn tự động tải và đóng các trang, trong khi vẫn giữ trang chính của bạn mở? –

5

Điều này tôi thấy rất dễ. Trong MainWindow của bạn, làm điều này:

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

      ShowsNavigationUI = false; 
     } 
    } 
} 

Và nếu bạn có một sự kiện vào nút bấm để mở một trang mới, chỉ cần làm điều này:

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

+1 để rõ ràng. – jogojapan

7

Nếu bạn đang sử dụng một Khung bạn có thể thay đổi kiểu mặc định của Frame để loại bỏ các nút điều hướng (được hiển thị bên dưới). Cách tiếp cận tương tự có thể được thực hiện cho NavigationWindow. Ban đầu tôi đã thử thiết lập Page.ShowsNavigationUI và nó không có hiệu lực. Chỉ cần thêm phong cách dưới đây vào một ResourceDictionary và nó hoạt động tốt.

<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

chỉ cần cho biết Trang của bạn Vùng chứa, bạn muốn thanh điều hướng hay không, sử dụng Thuộc tính điều hướngUcho phép.

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

0

Tôi có vấn đề này bất cứ khi nào tôi tự động thay đổi sở hữu nội dung của một Frame, và giải quyết nó bằng cách sử dụng đoạn mã sau vào nhấp chuột của tôi() sự kiện.

ContentFrame.NavigationUIVisibility = NavigationUIVisibility.Hidden; 

Trường hợp ContentFrame là tên của khung, như được định nghĩa trong XAML. tức là

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

Rất dễ thực hiện.

đây:

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

:-p

Các vấn đề liên quan