2009-03-28 8 views
0

私は、Webサイト上のナビゲーションバーのように、WPFで再利用可能なナビゲーションスタイルカスタムコントロールを作成しようとしています。それは私のアプリのすべてのメインページへのリンクを含みます。このコントロールは、NavigationWindow内のすべてのページの上に置くことができます。ウェブサイトのように、ページ全体に一貫した見た目と感触を与えます。WPFスタイルアクティブなアイテム

私の問題は、現在のページのリンクと他のページのリンクとのスタイルを変えることです。そのため、すばやく目を通し、現在のページを確認できます。コントロールは各ページで同じなので、どのページが「アクティブ」であるかを教えて、適切にリンクをスタイルする必要があります。

私の最初の考えは、コントロールのアクティブプロパティを各ページに1つずつ配置し、そのページで適切なプロパティをtrueに設定することでした。

<local:Header IsHomePageActive="True" /> 

が今私のヘッダーカスタムコントロールのコントロールテンプレートで、私はDataTriggerを作成することができます。

例を(または私は、いずれかの方法を代わりに多くの特性を有するの列挙値を受け入れつのプロパティを使用することができます)それは、このプロパティを時計:

<Style.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource FindAncestor, AncestorType={x:Type local:Header}}, Path=IsHomePageActive}" Value="true"> 
    <Setter ... /> 
    <Setter ... /> 
    <Setter ... /> 
    </DataTrigger> 
</Style> 

すべてその背景の後、ここに私の質問です。これは動作しますが、トリガーが1つのリンクにのみ適用される「IsHomePageActive」プロパティを直接参照する必要があるため、DataTriggerとその中のすべてのSetterを複製する必要があります。だから実際のSTYLEの記述はまったく同じです(私が意味するところは、Settersは同じですが)、すべてのリンクに異なるStyleが必要です。唯一の違いは、トリガーが見ているプロパティです。

何百もの複製されたXAMLの行に終わることなくこれを行う方法がありますか?

答えて

1

リストボックス(たとえば)をマスターとして使用し、ページを詳細としてマスター/ディテールパターン()を使用する方法について説明します。

次に、選択したアイテムのスタイルをリストに指定します。

異なるリスト項目を選択するとページが変わり、それは他の項目と異なって見えます。あなたは、このようなページは、UserControlから継承し、文字列のタイトルを持っている一覧ページとして依存関係プロパティを持っている場合

あなたは、リストボックスで選択した項目の

 <ListBox 
       ItemsSource="{Binding Pages}" 
       IsSynchronizedWithCurrentItem="true"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Title}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

     <ScrollViewer VerticalScrollBarVisibility="Auto" 
         Content="{Binding Pages/}" /> 

それからちょうど設定されたスタイルを使用することができます

関連する問題