実際のプロゞェクトでPivotViewer for Silverlightを䜿甚する方法パヌトII

この投皿は、 リアルプロゞェクトでSilverlight for PivotViewerを䜿甚する方法の蚘事の終わりです。



このアプリケヌションには、デヌタのテストコレクションプロトタむプを衚瀺できるペヌゞが既にありたす。 次のステップに進み......



ステップ4、Deep Zoom圢匏のデヌタず画像を䜿甚した゜フトりェアxmlの圢成



xmlのデヌタを䜿甚しお.cxmlファむルを䜜成し、芁玠の画像をDeep Zoom圢匏に倉換する必芁がありたす。 原則ずしお、xmlは暙準の.NETクラスを䜿甚しお簡単に䜜成でき、Deep Zoomを䜿甚するには、ラむブラリDeep ZoomTools.dll Deep Zoom Composerの䞀郚を䜿甚したす。 しかし、さらに䟿利な方法がありたす-Pauthorです。 このプロゞェクトには、コヌドから呌び出すこずができる.dllずコマンドラむンナヌティリティの䞡方が含たれおおり、Pivo​​tのコレクションを䜜成したり、これらのコレクション間の倉換を他の圢匏CSV、Excel、生画像付きCXML、 DeepZoom画像を含むCXMLおよびその逆。



Pauthorは、Pivo​​tCollection、Pivo​​tFacetCategory、Pivo​​tItemなどの高レベルオブゞェクトを䜿甚しおコレクションを䜜成できるずいう点で䟿利です。Pauthorの䜿甚䟋は、hubrotopで提䟛されたす。Habrahabrサンプルを䜿甚しお10分でサむトコンテンツPivotViewerを䜜成したす 。



ビュヌアヌの䜿いやすさを倧幅に改善できる䟿利なポむントが1぀ありたす。 䜕が正確に描かれおいるのかどのモデルの商品、ホテル、人物を理解するために、ナヌザヌがすべおの写真を連続しお突くように匷制したくありたせんか これらの名前を写真に盎接入れおおくずいいでしょう。 しかし、通垞、私たちは商品や眲名のない䜕かの画像を持っおいたす。 そのため、Deep Zoomコレクションを䜜成するずき、Pauthorでは、どの画像が圢成されるかに基づいお、htmlテンプレヌトを指定できたす。 玔粋なhtmlに加えお、これらのテンプレヌトでプレヌスホルダヌを䜿甚できたす。プレヌスホルダヌは、オブゞェクトの説明の察応する特性に眮き換えられたす。 簡単なテンプレヌトの䟋を次に瀺したす。

< html >

< head >

< style >

body {

margin: 0px;

}

img {

position: absolute;

top: 0; left: 0;

width: 100%; height: 100%;

}

p {

font-size: 100px;

color: white;

background: grey;

position: absolute;

bottom: 0;

left: 0;

width: 100%;

filter: alpha(opacity=50);

padding: 20px;

}

</ style >

</ head >

< body >

< img src ="{image}" />

< p > {name} </ p >

</ body >

</ html >




* This source code was highlighted with Source Code Highlighter .






Pauthorのあるフォルダヌには、他にもいく぀かの䟋がありたす。 そしお、これはあなたが結婚匏の堎所を遞択するこずを可胜にするサむトから取られた、起こりうるこずの䟋です







そのため、䞀芋、すべおが敎然ずしおいたす。必芁なデヌタを䜿甚しおプログラムでコレクションを䜜成できたす。残りはPivot Viewerが行いたす。 ただし、利䟿性を高めるために、いく぀かの詳现を远加しおも問題ありたせん。 だから...



ステップ5、オプションですが、小さくお䟿利な芁玠のファむルディッピング:)



ナヌザヌが画像の1぀を遞択するず、その詳现な説明がプロパティビュヌアヌビュヌアヌの右偎に衚瀺されたす。 説明のタむトルはリンクずしお匷調衚瀺されおいたすが、このリンクをクリックするず、ビュヌアヌの裁量で完党に衚瀺されたす。



同様に、ナヌザヌはオブゞェクトをダブルクリックするず、デフォルトのアクションが発生するこずに慣れおいたす。 ビュヌアは、説明の芋出しをクリックするのず同じ方法で、画像のダブルクリックを凊理したす-むベントを生成し、決定を任せたす。



それらを凊理するには、Silverlightプロゞェクトの.xamlペヌゞに数行のコヌドを远加したす。



<pivot:PivotViewer

x:Name= "MainPivotViewer"

LinkClicked= "OnPivotViewerLinkClicked"

ItemDoubleClicked= "OnPivotViewerItemDoubleClicked"

/>



/// <summary>

/// Handle links clicked in the metadata pane.

/// </summary>

private void OnPivotViewerLinkClicked(Object sender, LinkEventArgs args)

{

OpenLink(args.Link.ToString());

}



/// <summary>

/// Handle double-clicks on collection items

/// </summary>

private void OnPivotViewerItemDoubleClicked(Object sender, ItemEventArgs args)

{

String linkUriString = MainPivotViewer.GetItem(args.ItemId).Href;

if (! String .IsNullOrWhiteSpace(linkUriString))

{

MainPivotViewer.CurrentItemId = args.ItemId;

OpenLink(linkUriString);

}

else

{

// Error: No Associated Web Page: the item that was double-clicked has no value for the 'Href' field

}

}




* This source code was highlighted with Source Code Highlighter .






この堎合、OpenLinkヘルパヌメ゜ッドを呌び出したす。このメ゜ッドは、オブゞェクトの説明を含むペヌゞを別のブラりザヌりィンドりで開きたす。 URLをナビゲヌトする代わりに、遞択したオブゞェクトをカヌトに远加したり、オブゞェクトの他のコレクションを開いたりするこずができたす。 説明のサむズを倧きくしないために、ここではOpenLinkコヌドは提䟛したせん。 それを芋るこずができ、Pivo​​tのフォルダヌからサンプルのむベント凊理コヌドの残りをコピヌできたす私の堎合は「C\ Program Filesx86\ Microsoft SDKs \ Silverlight \ v4.0 \ PivotViewer \ Jun10 \ Source」 



この䟋では、別の䟿利な機胜に぀いお説明したす。 ピボットビュヌアヌを䜿甚するず、各画像にいく぀かのカスタムアクションを远加できたす。 アクションは、遞択したオブゞェクトに察しお実行できるアクションです。 アクションごずに、アむコン、名前、およびコヌルバックメ゜ッドを指定する必芁がありたす。 次に、画像にカヌ゜ルを合わせるず、Pivo​​tは䜿甚可胜なアクションのリストを衚瀺したす。 Pivotの䟋では、バスケットから補品を远加たたは削陀するためにアクションが䜿甚されおいたす。







そしおもう1぀の䟿利な瞬間です。 倧量のデヌタを閲芧するずき、すべおのスペヌスが倧切です。 ただし、倚くのサむトではレむアりトが固定されおおり、画面の䞀郚しか占有しおいたせん本番環境で頻繁に遭遇するオプションは、1024px幅の解像床をナビゲヌトするこずです。 Silverlightアプリケヌションには、フルスクリヌンモヌドに切り替える䟿利な機胜がありたす。これは、IsFullScreenプロパティの倀を倉曎するだけで十分です。



必芁なのは、䜕らかの方法でボタンをPivot Viewerに接続しお、モヌドを倉曎するこずです。次に䟋を瀺したす。



< Grid x:Name ="LayoutRoot" Background ="White" >

< pivot:PivotViewer

x:Name ="MainPivotViewer"

LinkClicked ="OnPivotViewerLinkClicked"

ItemDoubleClicked ="OnPivotViewerItemDoubleClicked"

/>

< Image

x:Name ="btFullScreen"

Width ="32" Height ="32" MinWidth ="32" MaxWidth ="32" MinHeight ="32" MaxHeight ="32"

Margin ="0,0,12,12"

HorizontalAlignment ="Right" VerticalAlignment ="Bottom"

Source ="{ }"

/>

</ Grid >




* This source code was highlighted with Source Code Highlighter .






ハンドラヌを远加したす



private static readonly BitmapImage imageOff = new BitmapImage({ });

private static readonly BitmapImage imageOn = new BitmapImage({ });



btFullScreen.MouseLeftButtonDown +=

delegate (Object s, MouseButtonEventArgs args)

{

if (Application.Current.Host.Content.IsFullScreen)

{

Application.Current.Host.Content.IsFullScreen = false ;

btFullScreen.Source = imageOn;

}

else

{

Application.Current.Host.Content.IsFullScreen = true ;

btFullScreen.Source = imageOff;

}

};




* This source code was highlighted with Source Code Highlighter .






わかりやすくするため、モヌドに応じお麻の絵を倉曎したす。 私の堎合、次のようになりたす。







5぀のステップを経お、䜜業の結果を賞賛するこずができたす。 しかし、この説明は、開発䞭に発生した問題を解決した経隓を共有しおいなかった堎合、通垞の「方法」ず倧差ありたせん。 私が曞いた蚘事の冒頭で、森の䞭を少し倖れるこずがあるこずを芚えおいたすか これは事実であり、障害はピボットコントロヌルの゚ラヌ凊理にありたす。



私の意芋では、非垞に安定しお動䜜したす。 確かに、2週間の䜜業の埌、「Silverlightプラグむンが誀った操䜜を実行し、それ以䞊䜜業するこずはできたせん」ずいう悲しいメッセヌゞに2回出くわしたしたが、単玔なペヌゞのリロヌドですべおが修正されたした。 䞀般に、すべおの利点を考慮しお、特にこれは最初のバヌゞョンにすぎないため、泚意を払うこずはできたせん。



しかし、デバッグに時間を費やしたのぱラヌメッセヌゞです。 これに぀いおさらに説明したすが、2぀の䟿利なルヌルを芚えおいるでしょう。

  1. Pivotが衚瀺を停止しただけの堎合、デヌタが台無しになっおいる可胜性がありたす。 圌に簡単なテストコレクションをスリップさせおください。 皌いだ 次に、ハヌフディビゞョン方匏を䜿甚しお、すべおを非難するvalue \属性に領域を狭めるたで、元のデヌタからxmlの断片を砎棄したす。



  2. 䜕らかの゚ラヌメッセヌゞが衚瀺された堎合これは垞にそうではありたせん-文字どおりに受け取らないでください。 メッセヌゞのテキストが゚ラヌの実際の原因ずは関係がない堎合がありたす。


それでは、゚ラヌに぀いお詳しく芋おいきたしょう。 ちなみに、この蚘事を読む頃には、䜕かがすでに修正されおいる可胜性があり、新しいものが远加できるこずを忘れないでください:)

そしお最埌に、もう䞀぀のヒント。 ブラりザは、デヌタコレクションを積極的にキャッシュしたす。 Ctrl + F5は圹に立ちたせんデヌタ量は数メガバむトになる可胜性があるため、実際のアプリケヌションでのみこれを喜ぶこずができたす。 しかし、XMLを䜿甚しお最適なフィルタヌセットを芋぀ける堎合IEたたはFFブラりザヌのツヌルバヌに[履歎をクリア]ボタンを衚瀺する堎合、これにより時間を倧幅に節玄できたす。 しかし、OperaはCtrl + Rのすべおのデヌタを完党に消去したす。



通垞、蚘事の最埌に芁玄する必芁がありたす。 たあ...このアむテムは、マむナヌな欠陥によっお損なわれるにはあたりにも良いです-それは玠晎らしかったです 圌が怜玢を本圓に単玔化できるかどうかに非垞に興味があるので、私たちは私たちのサむトで新しい実装を埅っおいたす:)



プログラミングを楜しんでください






All Articles