WPF控件和边距与窗口大小成正比

时间:2013-12-20 01:18:17

标签: c# wpf silverlight xaml layout

目前,当我制作用户界面时,我会根据屏幕尺寸将控件的所有边距和大小设置为固定大小。有没有办法动态调整大小或边距与屏幕大小成比例,因此不需要每次都在XAML中设置属性。

我目前的知识告诉我,我可以设置固定宽度&样式或模板中的高度或使用的每个布局中的高度。

2 个答案:

答案 0 :(得分:3)

我会说重新思考你的方法。不要使用边距绝对定位元素,而是使用正确的面板,以便根据容器的大小正确地重新定位和拉伸元素。

WPF中有许多面板支持不同的布局,可以动态自动布局元素,例如StackPanel用于堆叠,WrapPanel用于包装,请参阅此处的面板概述:http://msdn.microsoft.com/en-us/library/ms754152(v=vs.110).aspx

e.g。

而不是:

<Grid>
    <Label Content="Name:" Margin="92,320,0,0"/>
    <TextBox Text="enter your name..." Margin="124,320,0,0"/>
</Grid>

使用:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Label Content="Name:" Grid.Column="0"/>
    <TextBox Text="enter your name..." Grid.Column="1"/>
</Grid>

然后使用Margin来提供元素空间,而不是位置,例如保证金为5。

答案 1 :(得分:1)

不确定这是否是您要找的。但我所做的是将主窗口的大小设置为客户端监视器大小的80%。

 public void SetPage(Page currentPage)
    {
        currentPage.Tag = this;  //Set the new page's Tag to 'this' so we can reference it from within.
        _mainFrame.Navigate(currentPage);
        double height = System.Windows.SystemParameters.PrimaryScreenHeight;
        double width = System.Windows.SystemParameters.PrimaryScreenWidth;

        //set the size of the window to 80% of the client monitor
        this.Height = (80.0 / 100.0) * height;
        this.Width = (80.0 / 100.0) * width;

        WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;            
    }