そのため、このようなアプリケーションの作成を試みます。 新しい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ファイルでコマンドを作成し、このメソッドをそれにバインドし、実行するボタンをこのコマンドにポイントします。
したがって、ページを切り替えるためのボタンを備えたパネルを作成しました。 より簡単なソリューション-Hyperlinkを使用できます。コントロールに追加しましょう。< 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 .
したがって、結果として、おおよそ次のウィンドウビューを取得する必要があります。< 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の逆コンパイルタスクをより適切に処理します 。 これらのプログラムを比較する小さなスクリーンショットを次に示します。
最も興味深いのは、スタイルキーの意味が実際にそのようなものであり、スクリーンショットに示されているとおりであることです。x:Key = "is"。 つまり、スタイルでは、キー名を使用してスタイルを参照できます(スタイルが接続されている場合)。 このような奇妙なキー名が作成される理由は明らかではありません(また、BAMLビューアーがそれらを正しく認識しないこともわかります)。 その結果、スタイルエクスプローラーは実際に機能するXAMLテキストを提供します。たとえば、すべてのXAMLテキストをプロジェクトに転送でき、それが有効になりますが、BAMLビューアーの場合はそうではありません。 ただし、XAMLのすべてが必要なわけではありません。 NavigationWindowビューの書き換えに興味があります。このため、最初にプロジェクトに新しいThemes / General.xamlリソースファイルを作成します(任意のファイル名とディレクトリを選択できます)。 リソースファイルをアプリケーションで使用可能にするには、App.xamlファイルにもリソースファイルを含める必要があります。これは次のように行います。
General.xamlファイルには、PresentationFramework.Aeroライブラリのリソースファイルを含めて、Aeroテーマの既存のスタイルを将来のNavigationManagerのスタイルで使用できるようにする必要があります。 これは同じ方法で行われます:< 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 .
次に、スタイルエクスプローラーから、NavigationWindowのスタイルとそのContentTemplate(スタイルで使用される)をコピーします。 ContentTemplateをわずかに変更するか、ApplicationToolbarコントロールを追加します。他には何もしません。 フォームresources、ď、êのリソースへのリンクは残り、機能することに注意してください。 その結果、おおよそ、そのようなスタイルのセットを取得する必要があります(ほとんどの場合、コメントされていますが、スタイルエクスプローラーから提供されたものはすべてそのままです)。< 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 .
その結果、アプリケーションは次のようになります。< 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 .
ご覧のとおり、ApplicationToolbarコントロールがナビゲーションパネルに配置されました。
アプリケーションのソースコード: WPF_NavigationWindow.zip(12.64 KB)