WPExtensionsライブラリでWP7開発を簡素化する

先日、WPExtensionsライブラリのリリースをなんとかリリースしました。 ライブラリの古い作業名はあまりわかりにくいShWPではなく、基本的にライブラリには標準コントロールに対する拡張機能とラッパーが含まれています。



Nugetパッケージマネージャーのサポートが追加されました。 次のコマンドでライブラリをインストールできます:

インストールパッケージWPExtensions



codeplexを使用してライブラリ、ソースコード、デモをダウンロードすることもできます。

通常どおり、ライブラリを使用するには、適切な名前空間宣言を追加する必要があります。



xmlns:WPExtensions = "clr-namespace:WPExtensions; assembly = WPExtensions"



次に、ライブラリの主要コンポーネントを検討します。



AdvancedApplicationBar



このコンポーネントについては、 オタク誌にすでに出版物がありました

何が起こったかを簡単に繰り返し、このバージョンの新機能について説明します。



AdvancedApplicationBarは、標準のApplicationBarのラッパーであり、いくつかの新しい機能を追加します。 コントロールとして実装されているため、メインコンテナー(通常はグリッド)内に配置する必要があります。



<phone:PhoneApplicationPage ...> <Grid x:Name="LayoutRoot" Background="Transparent"> ... <WPExtensions:AdvancedApplicationBar IsVisible="True" IsMenuEnabled="True"> <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/> <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 1"/> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 2"/> </WPExtensions:AdvancedApplicationBar> </Grid> </phone:PhoneApplicationPage>
      
      







MenuItemを別のタグに割り当てる必要がないことに注意してください。



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



多くの場合、異なるパノラマ/ピボットアイテムがApplicationBarに異なるボタン/メニューのセットを表示するために必要です。 msdnでは、resに個別のApplicationBarを作成し、Actinアイテムを変更するときにApplicationBarを変更するソリューションが提案されています



ここで、PanoramaItem / PivotItem内の対応するボタンを移動して、ボタン/メニューがこのアイテム(ボタン1 /メニューアイテム1)のみに表示されるようにします。



この場合、残りのメニューボタンはデフォルトですべての要素の後に表示されます。 パノラマ内の要素の前にボタン/メニューを表示する必要がある場合は、メニュー/ボタンをパノラマ(ボタン2)に転送するだけです:



 <phone:PhoneApplicationPage .... xmlns:WPExtensions="clr-namespace:WPExtensions;assembly=WPExtensions" ...> <Grid x:Name="LayoutRoot" Background="Transparent"> <!--         --> <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/> <Grid x:Name="ContentPanel" Margin="12,0,12,0"> <controls:Panorama> <controls:PanoramaItem Header="Item1"> <Grid> ... <!--          PanoramaItem --> <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 1"/> </Grid> </controls:PanoramaItem> <controls:PanoramaItem Header="Item2"> ... </controls:PanoramaItem> </controls:Panorama> </Grid> <WPExtensions:AdvancedApplicationBar IsVisible="True" IsMenuEnabled="True"> <!--        --> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 2"/> </WPExtensions:AdvancedApplicationBar> </Grid> </phone:PhoneApplicationPage>
      
      







バインディングサポート



前回説明したように、AdvancedApplicationBarプロパティは元のプロパティとは異なり、データバインディングをサポートしています。



  <WPExtensions:AdvancedApplicationBarIconButton Text="{Binding AppBarIconButtonText}" IconUri="{Binding AppBarIconButtonText}" Visibility="{Binding Visibility}" Command="{Binding DeleteCommand}" CommandParameter="42" />
      
      







フォーカスされている要素のバインディングの更新のサポート。



これは、新しいバージョンの革新の1つであり、特にDataBindingをアクティブに使用する場合に役立ちます。

この点についてさらに詳しく説明しましょう。



フォームにBindingを持つTextBoxがあるとします。



 <TextBox Text="{Binding Text,Mode=TwoWay}" />
      
      





また、対応するボタンがフォーム上にあり、標準の<shell:ApplicationBarIconButtonボタンがあります。このボタンは、ハンドラ内でMessageBoxの添付プロパティのテキストを表示します。



 MessageBox.Show(Text);
      
      







ApplicationBarIconButtonをクリックしたときとButtonをクリックしたときにテキストを編集し、編集モード(TextBoxでフォーカス)のままである場合、異なる結果が表示されます。 ApplicationBarIconButtonをタップすると、古いテキストが表示されていることがわかります。 これは、フォーカスが失われたときにのみテキストが更新され、標準のAppBarボタンがフォーカスを失わないためです。



AdvancedApplicationBarでは、ボタンをクリックするとフォーカスが失われます(フォーカスがページに転送されます)。ボタンが期待どおりに動作し、新しいテキストが表示されることがわかります。

必要に応じて、属性DisableLostFocus = "True"を使用してデフォルトの動作を返すことができます



 <WPExtensions:AdvancedApplicationBarIconButton ... DisableLostFocus="True" />
      
      







モード=「デフォルト」IsVisible =「True」

デフォルト値とは異なるApplicationBar属性がさらに2つあります。

デフォルトでは、ApplicationBarのMode、IsVisible属性の値は、Mode = "Default" IsVisible = "True"に設定されます



AdvancedApplicationBarでは、これらの属性の値はデフォルトでは固定されておらず、次の条件に依存します。



ページやPanoramaItem / PivotItemにボタンがある場合、属性値はMode =“ Default” IsVisible =“ True”です

画像



メニュー項目のみがある場合、属性値は等しくなります。Mode=“ Minimized” IsVisible =“ True”



画像



ボタン/メニュー項目がない場合、属性IsVisible =“ False”の値



画像



これで、AdvancedApplicationBarの概要は終わりです。 次は、TextBox拡張機能の説明です



テキストボックス拡張



かなり頻繁に、TextBoxの基本的な機能を見逃します。 将来、拡張機能のリストを拡張する予定ですが、これまでのところ、最も一般的な2つの問題のために、ライブラリに2つの拡張機能を追加しました。



これらの拡張機能は、単一の要素とコンテナ内の要素(Page、StackPanel、Grid)の両方に適用できます。 たとえば、ページ上のすべてのテキストフィールドの動作を設定する場合は、ページに属性を追加するだけです。

 <phone:PhoneApplicationPage ... WPExtensions:Extensions.UpdateBindingOnChange="True" WPExtensions:Extensions.SelectAllOnFocus="True">
      
      







UpdateBindingOnChange



特定のモデルに添付されたテキストフィールドがあるとします。



 <TextBox Text="{Binding Text,Mode=TwoWay}" />
      
      







多くの場合、テキストの変更中にモデルを更新する必要があります。これは通常、TextChangedイベントでBinding が更新されます。



これで、代わりに属性を使用できます:Extensions.UpdateBindingOnChange = "True"



 <TextBox Text="{Binding Text,Mode=TwoWay}" WPExtensions:Extensions.UpdateBindingOnChange="True" />
      
      







SelectAllOnFocus



値を編​​集するとき、たとえば価格/数量などを編集するなど、最初に古い値を消去する必要があるアプリケーションをよく見ることができます。たとえば、10を20に置き換えます。 ユーザーは、もう一度タップして現在の値をそのままにするか、目的の値の設定を開始するだけで値を置き換えることができます。



画像



これを行うために、GotFocusは通常、txtBox.SelectAll()メソッドが呼び出された場所でインターセプトされます。

これで、WPExtensions拡張機能を使用してこの動作を設定できます。Extensions.SelectAllOnFocus= "True"



 <TextBox WPExtensions:Extensions.SelectAllOnFocus="True" />
      
      







MicrophoneWrapperマイクのサポート



最新バージョン1.3では、Audio名前空間(WPExtensions.Audio)のマイクにラッパーが追加されました。



ラッパーの使用も非常に簡単です。

 var microphoneWrapper=new MicrophoneWrapper();
      
      





録音:

 microphoneWrapper.Record();
      
      





停止:

 microphoneWrapper.Stop();
      
      





サウンドの再生:

 microphoneWrapper.Play();
      
      





録音されたサウンドを取得するには、2つの方法があります。



「生」または元のレコードを受信する:

 microphoneWrapper.GetContent();
      
      





WAV形式でレコードを受信する:

 microphoneWrapper.GetWavContent();
      
      







このライブラリが誰かに役立つことを願っています。それ自体でフィードバックがあれば嬉しいです。



All Articles