如何在wpf中调整控件,调整锚点/停靠属性的等效值

Mik*_*ike 29 wpf autoresize

我已经阅读了这么多解决方案这个问题.他们每个人都无法解决我的问题.无论我把控件放在什么容器中,或者我在控件/容器上设置了什么属性,它都不会让步.我有一个带有控件的滚动查看器.我希望它在用户在运行时调整窗口大小时调整窗口大小.我需要的只是锚=顶部,底部,左侧,右侧.我不明白为什么在WPF中这是如此难以捉摸,以及为什么需要涉及容器对象和各种属性赋值来完成单个属性在Forms中的作用.但是这个问题的每个解决方案仍然导致我的控件保持在其设计时间大小,因为窗口在运行时调整大小.什么是在wpf中控制动态控件大小的简单方法?

小智 46

这也让我感到悲痛,AlexK帮助我看到了光明.诀窍是不设置高度和宽度....将这些设置为AUTO并使用MARGIN设置大小.设置HORIZONTALALIGNMENTVERTICALALIGNMENTSTRETCH,然后锚功能的作品.


H.B*_*.B. 5

控制需要拉伸,这应该是它应该有的:

<MyControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
Run Code Online (Sandbox Code Playgroud)

Stretch 取代设置两个方面的achors.

有关面板的帮助,请参阅此概述.另请参阅布局系统文档.

大多数控件都会自动拉伸,如果你有一个DataGrid,它也应该拉伸,在Kaxaml中尝试这个示例,它包含一个DataGrid和一个显示其大小的TextBlock:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <DataGrid Name="grid">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
                <DataGridTextColumn Binding="{Binding Tag}" Header="Occupation"/>
            </DataGrid.Columns>
            <FrameworkElement Name="Skeet" Tag="Programmer"/>
            <FrameworkElement Name="Gravell" Tag="Programmer"/>
            <FrameworkElement Name="Steve" Tag="Coffee Getter"/>
        </DataGrid>
        <TextBlock Grid.Row="1">
            <TextBlock.Text>
                <MultiBinding StringFormat="{}{0}, {1}">
                    <Binding ElementName="grid" Path="ActualWidth"/>
                    <Binding ElementName="grid" Path="ActualHeight"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

如果向下调整窗口大小,则应显示DataGrid的ScrollBars.