AdvancedApplicationBar。 WP7のApplicationBar機能の改善

多くのWP7開発者にとって、ApplicationBarの実装は不愉快な驚きです。 このコンポーネントはMSでまったく開発されていなかったが、silverilghtとは関係のないチームが、要求されたインターフェイスでコンポーネントを作成したという冗談を言うとうわさ



いくつかのプロジェクトでApplicationBarを積極的に使用する必要があるため、コードの量を大幅に削減できるAdvancedApplicationBarラッパーを作成しました。 実際、最も一般的な問題は、XAMLのマークアップでのみ解決できます。



そのため、よく耳にするApplicationBarに関する主な不満は次のとおりです。



MVVMの利点を味わった人にとって、不快な発見は、データバインディング(DataBinding)のサポートの欠如であり、したがって、ICommandのサポートの欠如でした。 たとえば、バックグラウンドコードを記述するよりも、ViewModelからIsEnabledプロパティを設定する方がはるかに優れています。



可視性プロパティの欠如-特定の条件に応じて一部の要素を非表示にする必要がある場合があります。



ApplicationBarは、PanoramaやPivotでの作業には不便です。 多くの場合、各タブに異なる要素を表示する必要があります。 SelectionChangedイベントで置き換えられるリソースでApplicationBarを部分的に支援しますが、これはIsEnabledプロパティなどをサポートするためのコードを大幅に複雑にします。



さらに、同じボタンを常に表示する必要がある場合は、各実装で複製する必要があります。



残念ながら、拡張機能を使用してこれらの問題を解決することはできません。ApplicationBarは拡張できず、継承することしかできないため、いくつかの改善の機会があります。 それにもかかわらず、拡張機能ほど便利な機能ではありません。



また、ApplicationBarがPageプロパティであるIApplicationBarインターフェイスを実装するという事実にもかかわらず、ApplicationBar実装のみが受け入れられるため、これを代替実装に置き換えることはできません。



AdvancedApplicationBarを開発するときバックグラウンドコードを記述することなく、XAMLのマークアップだけで一般的な問題の解決策を提供しようとしました。



接続方法

使用するには、sh.dllへのリンクを追加し、xmlnsを追加する必要があります:Sh = "clr-namespace:Sh; assembly = Sh"



AdvancedApplicationBarはメインApplicationBarのラッパーのように機能するため、メインパネル(通常はグリッド)内に配置する必要があります。

<phone:PhoneApplicationPage ...> <Grid x:Name="LayoutRoot" Background="Transparent"> ... <Sh:AdvancedApplicationBar> ... </Sh:AdvancedApplicationBar> </Grid> </phone:PhoneApplicationPage>
      
      





主な機能:

サポートDataBinding、ICommandサポート



<Sh:AdvancedApplicationBarIconButton

テキスト= "{Binding AppBarIconButtonText}"

IconUri = "{Binding AppBarIconButtonText}"

可視性= "{結合可視性}"

Command = "{Binding DeleteCommand}"

CommandParameter = "42"

/>



パノラマ/ピボットサポート:

ほとんどすべてのアプリケーションで、各パノラマタブと場合によってはピボットに対してApplicationBarで異なるボタンを指定する機能を実現する必要があるため、AppButtonとMenuItemをApplicationBar内にのみ追加する必要性を放棄することにしました。



たとえば、ページの最初の場所に常に追加ボタンを配置し、最後に設定ボタンを配置する必要があり、それらの間に特定のパノラマタブに固有の要素が必要な場合、各PanoramaItemのパノラマの前に追加ボタンを配置できますAdvancedApplicationBarIconButtonとAdvancedApplicationBarMenuItemを必要な場所に配置できます。

最後に、設定ボタンを配置できます。



概略的に:

  <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Margin="12,0,12,0"> <Sh:AdvancedApplicationBarIconButton ... /> <controls:Panorama> <controls:PanoramaItem> <Grid> ... <Sh:AdvancedApplicationBarIconButton .../> <Sh:AdvancedApplicationBarIconButton ... /> <Sh:AdvancedApplicationBarMenuItem ... /> </Grid> </controls:PanoramaItem> <controls:PanoramaItem> <Grid> <Sh:AdvancedApplicationBarIconButton ... /> </Grid> </controls:PanoramaItem> </controls:Panorama> <Sh:AdvancedApplicationBar> <Sh:AdvancedApplicationBarIconButton ... /> </Sh:AdvancedApplicationBar> </Grid>
      
      







XAMLツールのみを使用して(およびDataBindingを介してAppBarと対話する)、追加のコードなしでAdvancedApplicationBarを操作する可能性の小さな図解:





デモを含むライブラリとソースコードをこちらからダウンロードしてください



akhmed.ru経由



All Articles