【问题标题】:WPF XAML: How to automatically scale down children of a component in XAML?WPF XAML:如何在 XAML 中自动缩小组件的子级?
【发布时间】:2010-07-30 20:50:13
【问题描述】:

这是我的问题:

xaml 文件 1:模板化列表控件

<ItemsControl ItemSource={Binding myUIrelatedDataList}/>
   <ItemsControl.ItemTemplate>
       <DataTemplate>
           <my:DynamicUIPresenter Width="160" Height="80"/>
           <!-- here, I want to specify my desired size to which i want to
                scale down the generated UIElements -->
       </DataTemplate>
   </ItemsControl.ItemTemplate>
<ItemsControl/>

xaml 文件 2:项目模板

 <Border BorderBrush="Black" BorderThickness="1">
    <Border Child="{Binding Path=., Converter={StaticResource DynaUIConverter}}"/>
 </Border>

问题是我对myUIrelatedDataList 以及DynaUIConverter 正在生成的UIElement 类型一无所知。 DynaUIConverter 通常会生成一组相互嵌套并包含文本框、按钮等的 Stackpanel。这些面板没有设置宽度或高度,我可能无法修复。

我认为我需要测量生成的 UI 的最小尺寸要求,并将 ScaleTransform 动态应用于生成的 UI,或者更好地应用于包含生成的 UI 的边框。

我在后面的代码中尝试了这个,但缩放无法正常工作,因为我无法理解从孩子到父母的宽度和高度传播如何/是否真的有效。而且我还遇到了一些递归问题,导致最后的代码效率很低。

现在的问题是:我可以在 XAML 中直接/轻松地缩小子元素吗?

【问题讨论】:

    标签: wpf xaml scaling


    【解决方案1】:

    我相信Viewbox 会做你想做的事。它有一个总是给定其所需大小的子级,并且它对子级应用 ScaleTransform 以使其适合 Viewbox 内。默认情况下,它将应用统一拉伸,但您可以通过设置 Stretch 属性来更改它。

    类似这样的:

    <ItemsControl ItemsSource="{Binding myUIrelatedDataList}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Viewbox Width="160" Height="80">
                    <my:DynamicUIPresenter />
                </Viewbox>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    

    【讨论】:

    • 谢谢!这就是解决方案。不幸的是,我刚刚完成了自己的 AutoScalingContentControl,这只是另一个 Viewbox 实现。它现在也可以正常工作,但我将使用 Viewbox。谢谢!
    【解决方案2】:

    是的,将您的重复元素的 VerticalStretch 设置为 Stretch,这应该会自动使它们成为列表的一部分。

    至于列表,如果它从您的容器中溢出,请将其放入 Dockpanel。

    抱歉,我不明白你在用比例变换做什么 :) ...但听起来确实像是在敲钉子。

    如果不能帮助我们理解,可能会发布屏幕截图。

    【讨论】:

    • 我还刚刚了解到我应该更频繁地使用停靠面板,因为如果您希望某些子组件在其他子组件之后/之前/之间进行拉伸,它们提供了更灵活的布局。
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多