0

全部,

我确信这很容易做到,但我仍在努力做到这一点。我可以在代码隐藏中获取滚动查看器的 ViewPortHeight 并插入已加载和大小更改的事件以管理与 ViewPortHeight 相关的对象,但我想知道是否有更简单的方法来执行此操作而无需使用 CodeBehind。

即我想做的是以某种方式在 XAML 中获取 ViewPortHeight(和 ViewPortWidth)并将它们直接绑定到另一个元素的大小属性或我的 ViewModel(当然,使用我自己的 IValueconverter)。通过这种方式,我希望在调整窗口大小(或完成缩放转换)时更轻松地管理相关控件。

即在 PseudoCode 中,这是我希望完成的(没有 CodeBehind)

(假设 MyConverter 是资源中的 IValueConverter)

<ScrollViewer Name="MyScrollViewer">
    <loc:MyControl Width="{Binding Path=ViewPortWidth, ElementName=MyScrollViewer, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource MyConverter}, ConverterParameter=10}" />
</ScrollViewer>

提前致谢。

4

2 回答 2

0

“管理与 ViewportWidth 相关的对象”——在我看来,您需要一个布局容器,例如允许您创建行和列的 Grid。在这些里面,你可以放置任何你想要的 UIElement。您还可以告诉单元格具有固定大小或使用基于可用空间的相对值。

如果你想弄清楚 ViewportWidth 你需要这样做:

<ScrollViewer Name="MyScrollViewer">
    <StackPanel>
     <Button Width="100"/>
     <Button Width="200"/>
     <Button Width="300"/>
     <Button Width="400"/>
    </StackPanel>
</ScrollViewer>
<TextBlock Text={Binding ElementName=MyScrollViewer, Path=ViewportWidth}"/>

ScollViewer 具有称为 ViewportWidth 的属性。请参阅http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.aspx

于 2013-04-10T22:01:42.647 回答
0

应该:

<ScrollViewer Name="MyScrollViewer">
    <loc:MyControl Width="{Binding Path=ViewportWidth, ElementName=MyScrollViewer, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource MyConverter}, ConverterParameter=10}" />
<!--Notice that it is ViewportWith, not ViewPortWidth-->
</ScrollViewer>
于 2013-04-12T23:12:04.363 回答