wpf - 在 WrapPanel 内自动调整大小?

标签 wpf xaml

需要有关 xaml 布局的帮助。

我有一个 Wrapanel,里面有两个元素。左边的 MainGrid 需要固定为 900 像素。第二个,AuxillaryDataScrollViewer,如果 WrapPanel 包裹它,我希望最小值为 650,最大值为 100%。这可能吗?

这是我到目前为止得到的:

<Window x:Class="scratch.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="768" Width="1024">
    <Grid>
        <ScrollViewer>
            <WrapPanel>
                <Grid Width="900" Height="800" Background="Bisque"></Grid>
                <ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden" Width="650">
                    <Grid Width="1500" Height="700" Background="Tomato"></Grid>
                </ScrollViewer>
            </WrapPanel>
        </ScrollViewer>
    </Grid>   
</Window>

谢谢!

编辑添加更多详细信息:

客户希望进行数据输入并在右侧面板中实时查看计算结果,但他实验室中的某些计算机只能支持 1280 像素宽度,因此在这些计算机上他希望结果换行到下面数据输入表单。

最佳答案

由于需求定义如此明确,您只需添加一个 SizeChanged 处理程序,并根据容器的宽度手动设置第二个元素的宽度。如果容器小于 900 + 650,则将第二个元素拉伸(stretch)到容器的 100%。

public MainWindow()
{
    SizeChanged += MainWindow_SizeChanged;
}

void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
{
    double firstElementWidth = MainGrid.Width;                          // 900
    double secondElementMinWidth = AuxillaryDataScrollViewer.MinWidth;  // 650 

    double secondElementWidth;

    // if wrapped, stretch to the container
    if (e.NewSize.Width < firstElementWidth + secondElementMinWidth)
        secondElementWidth = e.NewSize.Width;
    // otherwise (not wrapped), fill the remainder of the first row
    else
        secondElementWidth = e.NewSize.Width - firstElementWidth;
}

显然,这是快速而肮脏的。如果您需要更强大的东西,那么我建议编写 custom panel遵守您需要的约定。 WrapPanel 无法将元素拉伸(stretch)到整体宽度,但您没有理由不能设计一个能够做到这一点的面板。

关于wpf - 在 WrapPanel 内自动调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211133/

相关文章:

c# - 如何运行 x64 Debug模式 DLL 是 "Any CPU"?

c# - 更改 CalendarDatePicker 中 CalendarGlyph 的前景属性

c# - 大型可滚动数据 SL4 的虚拟化性能问题

c# - 将 XAML 中的可见性绑定(bind)到可见性属性

c# - 具有透明填充但实线描边的 WPF 形状可能吗?

c# - 找到 TreeViewItem 来放置数据

wpf - 如何在 XAML 中更改 ToggleButton 的自定义内容

WPF:删除动画后防止触发 "Completed"事件

wpf - 从 ViewModel 绑定(bind) WPF ComboBox 的数据 - 无法更改所选项目

wpf - 将生成的 ADO.Net DbContext 放入 View-Models 的最佳方法