0

画面を2つに分割したWPFページプロジェクトを作成しようとしています。左側には、4つのクリック可能なリンク/ボタンがあります。

リンクの1つをクリックすると、画面の右側に対応するページが開きます。そこで、オプションを設定できます。ユーザーが画面上部のナビゲーションバーを使用する場合は、右側にのみ適用する必要があります。

これは可能ですか?より良いアプローチは何でしょうか?

どのページをロードするかをページ(パーツ)に指示する方法を知りたいのですが。それで、それは正しいページを動的にするでしょうか?

分割したほうがいいでしょうGridか?それともDockPanel、より良い解決策でしょうか?

ラージWindowをWPFで作成しましたが、これらすべてのページを便利なナビゲーションに分割したいと思いPageます。そのため、WPFとXAMLの使用について少し経験があります。この問題にどのように取り組むべきですか?

4

1 に答える 1

3

最初に、必要なコンポーネントを特定する必要があります。主に、LeftSideナビゲーションペイン、TopSideナビゲーションペイン、およびMainContentペインの3つのコンポーネントが表示されます。最初にMainContentペインについて説明します。これを行うための最良の方法は、これを動的に作成するためにバインディングと日付のテンプレートを使用することだと思います。ViewModelまたはDataContextには、MainContentに表示するコンテンツを表すプロパティが必要です。これを呼び出すとMainContent、MainContentビューがになりContentControl、プロパティContentバインディングがViewModelに設定されます。MainContent財産。このように、表示するクラス項目ごとにDataTemplateを設定するだけで済みます。他の方法は、タブコントロールを使用してControlTemplateを変更することです。この方法は、表示するすべてのコンテンツを事前に定義する必要があるため、動的ではありません。

これで、ナビゲーションペインに任意のコントロールを使用できます。たとえば、ラジオボタンを使用してControlTemplateを変更し、コマンドを使用してビューモデルのロジックを作成できます。

そして今、Gridまたはの使用は、DockPanelアプリケーションに実行させたいことによって異なります。動的な幅が必要な場合は、を使用する必要がありGridますGridSplitterが、固定の幅が必要DockPanelな場合は、よりも少し効率的/高速であるため、を使用できますGrid

この回答がお役に立てば幸いです。混乱しないでください。疑問がある場合はフィードバックしてください。


編集

たとえば、ビューモデルでは次のようになります。

public class MainViewModel:INotifyPropertyChanged
{
    public object Content {get; set;}    //Here you must to raise the PropertyChanged event
    private ICommand _showSummaryCommand
    public ICommand ShowSummaryCommand
    {
         get { return new _showSummaryCommand ?? (_showSummaryCommand = new SomeCommandImplementation((sender,e)=>{Content = new SummaryViewModel()},true))}    //most of commands implementations recive two parameters, an delegate to execute and a bool delegate for can excecute
    }
}

ビューについては、いくつかのリソース辞書で:

<DataTemplate TargetType="{x:Type ViewModels:SummaryViewModel}">
    <DataGrid>
        <!--Here goes what ever you want to show for instace-->
        <TextBlock x:Name="descriptionText" Text={Binding Description}/>
    </DataGrid>
</DataTemplate>

そして、あなたがすべての内容を示すであろう場所で

<!--....-->
    <ContentControl Content={Binding Content}/>
<!--....-->

このコードがもう少し役立つことを願っています:)

于 2013-03-06T20:18:52.843 に答える