【发布时间】:2011-12-09 16:49:38
【问题描述】:
我正在尝试用this one 替换我们 Silverlight 应用程序中的 Silverlight 2 时代第三方菜单栏控件,在升级到 VS2010 并且 Silverlight 4 破坏了第三方控件并且供应商通知我我们的版本购买的不适用于 Silverlight 4。我已经设法将我们使用的所有其他控件替换为标准控件,但没有标准的 Silverlight 菜单控件。我认为替换它会相当简单,但显然我的 XAML 技能不能胜任这项任务(注意:我没有自己编写应用程序,我继承了它)。
Silverlight 应用程序由一个 Windows 应用程序风格的顶部导航菜单栏和一个内容窗格组成。菜单应显示与内容重叠的下拉菜单(例如,它会显示在 VS 中的代码上)。
我遇到的问题是,如果我将菜单和内容放在一个网格的不同单元格中,菜单会被裁剪到其网格单元格内(这样单击时不会显示下拉菜单),但是如果我添加了一个带有 2 个具有不同 z-index 的网格的画布,我可以让菜单正确显示(重叠内容),但应用程序不会调整大小以适应浏览器窗口。
即如果我这样布局,菜单会被裁剪(这是简化的 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-index 值,但我所做的一切似乎都无法让它逃脱网格单元的边界。
第三方控件的网格单元格重叠没有问题,那么我做错了什么?
发布此新菜单控件的 CodeProject 文章似乎有未解答的问题,所以我想我先在这里尝试一下。
【问题讨论】:
-
我太傻了,它根本不需要在二级网格中......
标签: silverlight xaml