WPF-ページナビゲーションを使用して、NavigationWindowにコントロールを追加する

WPFでは、ナビゲートできる機能を持つアプリケーションを作成することができます。つまり、 PageNavigationServiceNavigationWindowなどのナビゲーションオブジェクトを使用します。 MSDNのほとんどの例は、 XBAPアプリケーションでそのようなオブジェクトを使用する方法を示していますが、ページナビゲーションを使用してクライアントアプリケーションを作成することを禁止するものはありません。

そのため、このようなアプリケーションの作成を試みます。 新しいWPFアプリケーションプロジェクトを作成し、そこから作成されたWindow1.xamlを削除し、FirstPage.xamlとSecondPage.xamlの2つのページを追加し、App.xamlファイルでアプリケーションを開始するページを指定します。

StartupUri = "FirstPage.xaml"起動後、前後に移動するためのボタンを備えたナビゲーションバーを含むアプリケーションのウィンドウが表示されます。 次に、あるページから別のページに移動するのに役立つリンクを作成する必要があります。 これはさまざまな方法で実行できます。 UserControlをプロジェクトに追加し、ApplicationToolbarを呼び出します。 ページ間をナビゲートできる最初の機会は、 NavigationServiceを使用することです。これには、次のコードでボタンクリックを処理するメソッドを作成します。private void NavigationCommand_Executed(オブジェクト送信者、ExecutedRoutedEventArgs e)

{

NavigationService service = NavigationService.GetNavigationService(this);

service.Navigate(新しいUri(e.Parameter.ToString()、UriKind.Relative));

}メソッドは、コマンドパラメーターで指定されたページに移動します。 ApplicationToolbarコントロールのxamlファイルでコマンドを作成し、このメソッドをそれにバインドし、実行するボタンをこのコマンドにポイントします。

< UserControl x:Class ="WPF_NavigationWindow.ApplicationToolbar" xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" Height ="Auto" Width ="Auto" >

< UserControl.Resources >

<!-- -->

< RoutedCommand x:Key ="NavigationCommand" />

</ UserControl.Resources >

< UserControl.CommandBindings >

<!-- -->

< CommandBinding Command ="{StaticResource NavigationCommand}" Executed ="NavigationCommand_Executed" />

</ UserControl.CommandBindings >

< ToolBar HorizontalAlignment ="Right" >

<!-- -->

< Button CommandParameter ="FirstPage.xaml" Command ="{StaticResource NavigationCommand}" > First Page </ Button >

< Button CommandParameter ="SecondPage.xaml" Command ="{StaticResource NavigationCommand}" > Second Page </ Button >

</ ToolBar >

</ UserControl >




* This source code was highlighted with Source Code Highlighter .




したがって、ページを切り替えるためのボタンを備えたパネルを作成しました。 より簡単なソリューション-Hyperlinkを使用できます。コントロールに追加しましょう。

< ToolBarPanel >

< TextBlock >

< Hyperlink NavigateUri ="FirstPage.xaml" > First Page </ Hyperlink >

< Hyperlink NavigateUri ="SecondPage.xaml" > Second Page </ Hyperlink >

</ TextBlock >

</ ToolBarPanel >




* This source code was highlighted with Source Code Highlighter .




したがって、結果として、おおよそ次のウィンドウビューを取得する必要があります。

無題

ここで、 NavigationWindow (ナビゲーションボタンが配置されている)にApplicationToolbarコントロールを配置するために、次の要望が生じます。 WPFでスタイルをオーバーライドする機能は、これを行うのに役立ちます。 つまり、 NavigationWindowのスタイルのオーバーライド。

NavigationWindowの新しいスタイルを記述する、または既存のスタイルを書き換えるには、最初にPresentationFrameworkライブラリからスタイルをプルする必要があります。 一般に、 PresentationFrameworkにはClassic、Aero、Royale、Lunaなどのテーマのセットがいくつかあり、各テーマは個別のライブラリにあります。 テーマでPresentationFramework.Aeroライブラリを見ていきます。 BAMLファイルを表示するには(コンパイル後、xamlファイルはbaml-Binary Application Markupにパッケージ化されています)、 BamlViewerプラグインでReflectorプログラムを使用できますが、実践が示すように、BamlViewerは逆コンパイルにあまり対応していません:キー名(キー)を正しく登録しません、 Geometryデータを誤って復号化し、スタイルコンテンツの説明の前にトリガーの説明を配置することもあります。これは、エレメントがトリガーに含まれていないためです。 一般に、StyleExplorerはBAMLの逆コンパイルタスクをより適切に処理します 。 これらのプログラムを比較する小さなスクリーンショットを次に示します。

無題2

最も興味深いのは、スタイルキーの意味が実際にそのようなものであり、スクリーンショットに示されているとおりであることです。x:Key = "is"。 つまり、スタイルでは、キー名を使用してスタイルを参照できます(スタイルが接続されている場合)。 このような奇妙なキー名が作成される理由は明らかではありません(また、BAMLビューアーがそれらを正しく認識しないこともわかります)。 その結果、スタイルエクスプローラーは実際に機能するXAMLテキストを提供します。たとえば、すべてのXAMLテキストをプロジェクトに転送でき、それが有効になりますが、BAMLビューアーの場合はそうではありません。 ただし、XAMLのすべてが必要なわけではありません。 NavigationWindowビューの書き換えに興味があります。このため、最初にプロジェクトに新しいThemes / General.xamlリソースファイルを作成します(任意のファイル名とディレクトリを選択できます)。 リソースファイルをアプリケーションで使用可能にするには、App.xamlファイルにもリソースファイルを含める必要があります。これは次のように行います。

< Application x:Class ="WPF_NavigationWindow.App" xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri ="FirstPage.xaml" >

< Application.Resources >

< ResourceDictionary >

< ResourceDictionary.MergedDictionaries >

<!-- -->

< ResourceDictionary Source ="Themes/General.xaml" />

</ ResourceDictionary.MergedDictionaries >

</ ResourceDictionary >

</ Application.Resources >

</ Application >




* This source code was highlighted with Source Code Highlighter .




General.xamlファイルには、PresentationFramework.Aeroライブラリのリソースファイルを含めて、Aeroテーマの既存のスタイルを将来のNavigationManagerのスタイルで使用できるようにする必要があります。 これは同じ方法で行われます:

< ResourceDictionary.MergedDictionaries >

< ResourceDictionary Source ="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/Aero.NormalColor.xaml" />

</ ResourceDictionary.MergedDictionaries >




* This source code was highlighted with Source Code Highlighter .




次に、スタイルエクスプローラーから、NavigationWindowのスタイルとそのContentTemplate(スタイルで使用される)をコピーします。 ContentTemplateをわずかに変更するか、ApplicationToolbarコントロールを追加します。他には何もしません。 フォームresources、ď、êのリソースへのリンクは残り、機能することに注意してください。 その結果、おおよそ、そのようなスタイルのセットを取得する必要があります(ほとんどの場合、コメントされていますが、スタイルエクスプローラーから提供されたものはすべてそのままです)。

< ControlTemplate x:Key ="ď" TargetType ="{x:Type NavigationWindow}" >

< Border Background ="{TemplateBinding Control.Background}" BorderBrush ="{TemplateBinding Control.BorderBrush}" BorderThickness ="{TemplateBinding Control.BorderThickness}" >

< DockPanel >

< Grid Name ="NavChrome" Background ="{StaticResource ê}" DockPanel . Dock ="Top" Height ="30" >

< Grid.ColumnDefinitions >

< ColumnDefinition Width ="29" />

< ColumnDefinition Width ="26" />

< ColumnDefinition Width ="17" />

< ColumnDefinition Width ="*" />

</ Grid.ColumnDefinitions >

<!-- ... -->



<!-- -->

< WPF_NavigationWindow:ApplicationToolbar Grid . Row ="0" Grid . Column ="3" HorizontalAlignment ="Right" />

</ Grid >



<!-- ... -->

</ DockPanel >

</ Border >

< ControlTemplate.Triggers >

<!-- ... -->

</ ControlTemplate.Triggers >

</ ControlTemplate >



< Style x:Key ="{x:Type NavigationWindow}" TargetType ="{x:Type NavigationWindow}" >

<!-- ... -->

</ Style >




* This source code was highlighted with Source Code Highlighter .




その結果、アプリケーションは次のようになります。

無題3 ご覧のとおり、ApplicationToolbarコントロールがナビゲーションパネルに配置されました。



アプリケーションのソースコード: WPF_NavigationWindow.zip(12.64 KB)



All Articles