2011-12-09 14 views
1

SilverlightアプリケーションのSilverlight 2-eraサードパーティ製メニューバーコントロールをthis oneに置き換えようとしていますが、VS2010にアップグレードしてSilverlight 4がサードパーティのコントロールを破ったことを通知しました。私が購入したバージョンはSilverlight 4では動作しません。標準のもので使用していた他のすべてのコントロールを置き換えましたが、標準のSilverlightメニューコントロールはありません。私はそれを置き換えるのはかなり簡単だと思ったが、明らかに私のXAMLのスキルは課題に達していない(注:私はアプリケーションを自分で書いていない、継承している)。Silverlightメニューコントロールのレイアウトの問題

Silverlightアプリケーションは、ナビゲーション用のWindowsアプリケーションスタイルのトップメニューバーとコンテンツペインで構成されています。メニューには、コンテンツが重複しているドロップダウンが表示されます(たとえば、VSのコード上に表示されます)。

メニューとコンテンツを1つのグリッドの異なるセルに配置すると、そのグリッドセル内にメニューがクロップされるため(クリックするとドロップダウンメニューは表示されません)、異なるZ-インデックスを持つ2つのグリッドを持つキャンバスを追加すると、メニューが正しく表示され(コンテンツがオーバーラップする)、アプリケーションがブラウザウィンドウに合わせてサイズ変更されません。メニューすなわち

が、私はこのようにそれをレイアウトした場合(これは私が何を意味するかを説明しようとするXAMLを簡略化されて、私はすべての重要な属性を除外しないようにしようとしましたが、必要がある場合があります)トリミングされています

<Grid x:Name="LayoutRoot"> 
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <slm:SLMenu Grid.Row="0" Grid.Column="0"/> 
     <StackPanel x:name="Content" Grid.Row="1" Grid.Column="0" /> 
    </Grid> 
</Grid> 

このようにレイアウトしても、コントロールはウィンドウをいっぱいにしません(背景色を追加すると、キャンバスがグリッドを塗りつぶすが、サブグリッドは塗りつぶされませんが、グリッドメニューコントロールを含むメニューコントロールは、ドロップダウンを表示しているときにメニューコントロールを含むようにサイズ変更されます)。

<Grid x:Name="LayoutRoot"> 
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Canvas> 
      <Grid Canvas.ZIndex="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <!-- define grid with 2 rows, one the height of the menu --> 
       <slm:SLMenu Grid.Row="0" Grid.Column="0" /> 
      </Grid> 
      <Grid Canvas.ZIndex="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <!-- define grid with 2 rows, one the height of the menu --> 
       <StackPanel x:name="Content" Grid.Row="1" Grid.Column="0" /> 
      </Grid> 
    </Grid> 
</Grid> 

これは以前の方法と同じように、最初のレイアウトで修正したいと思うでしょう。私はメニューコントロール自体にZ-インデックス値を設定しようとしましたが、グリッドセルの境界からエスケープすることはできません。

サードパーティのコントロールでグリッドセルが重複していても問題はありませんでしたので、どうしたらいいですか?

この新しいメニューコントロールが公開されているCodeProjectの記事は未解決の質問があるようですので、まずはここで試してみると思いました。

+0

私の愚かさは、それは第2レベルのグリッドにする必要はありませんでした... – Chris

答えて

0

メニューコントロールは、LayoutRootグリッド内にあるときに完全に機能し、サブグリッド内に配置しようとすると問題の原因になります。