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(); 


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

Source: https://habr.com/ru/post/J140678/


All Articles