WPF界面布局出现问题,大家请进

zyf_c_s_d_n 2014-03-19 09:39:30
设计的时候界面两边的空白区域的宽度是相等的,但是运行时界面的左右边距不相等,右边的比左边的宽,下边的比上边的宽。如图所示:

问题:1、这种现象是由什么原因造成的?
2、工作中用什么方法可以避免这种情况,或解决问题?

请各位帮帮小弟!
...全文
326 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
小猪八Q 2014-03-21
  • 打赏
  • 举报
回复
引用 8 楼 zyf_c_s_d_n 的回复:
<Grid>
        <Button Content="添加" Height="23" HorizontalAlignment="Left" Margin="205,167,0,0" Name="btnAddEdit" VerticalAlignment="Top" Width="75" TabIndex="6" IsDefault="True" Click="btnAddEdit_Click" />
        <Button Content="关闭" Height="23" HorizontalAlignment="Left" Margin="286,167,0,0" Name="btnClose" VerticalAlignment="Top" Width="75" TabIndex="7" Click="btnClose_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="42,9,0,0" Name="txtName" VerticalAlignment="Top" Width="120" MaxLength="20" TabIndex="1" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBlock1" Text="姓名" VerticalAlignment="Top" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="186,12,0,0" Name="textBlock2" Text="出生日期" VerticalAlignment="Top" />
        <DatePicker Height="25" HorizontalAlignment="Left" Margin="241,8,0,0" Name="dpBirthDay" VerticalAlignment="Top" Width="120" TabIndex="2" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,49,0,0" Name="textBlock3" Text="级别" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="42,46,0,0" Name="txtLv" VerticalAlignment="Top" Width="120" MaxLength="1" TabIndex="3" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="241,46,0,0" Name="txtTelNum" VerticalAlignment="Top" Width="120" MaxLength="11" TabIndex="4" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="186,49,0,0" Name="textBlock4" Text="手机号码" VerticalAlignment="Top" />
        <TextBox Height="55" HorizontalAlignment="Left" Margin="42,81,0,0" Name="txtAddress" VerticalAlignment="Top" Width="319" MaxLength="80" TabIndex="5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,84,0,0" Name="textBlock5" Text="地址" VerticalAlignment="Top" />
        <Separator Height="10" HorizontalAlignment="Left" Margin="12,149,0,0" Name="separator1" VerticalAlignment="Top" Width="349" />
    </Grid>
这是代码,应该怎么设置?界面就一个默认的的Grid,没添加任何布局。
你在代码中把程序的位置、宽高都写死了,自然就无法随着窗体大小自动变化了
公西雒 2014-03-21
  • 打赏
  • 举报
回复
引用 16 楼 zyf_c_s_d_n 的回复:
[quote=引用 4 楼 danding_ge 的回复:] 下载个Blend,完美解决布局设计问题,WPF必备。
你提供的方法还是没有解决问题,看来我还是得研究一下blend了,不知道容易上手吗 [/quote]一个完全不懂程序的人都能用。
zyf_c_s_d_n 2014-03-21
  • 打赏
  • 举报
回复
我找到了一个解决问题的办法: 1、window的属性的宽度和高度设置为Auto; 2、grid的宽度和高度设置为固定值,即为window的客户区的宽度和高度。 这样window在运行时是自动调整大小,但是受到了grid的大小的约束
zyf_c_s_d_n 2014-03-20
  • 打赏
  • 举报
回复
我试了控件的HorizontalAlignment和VerticalAlignment设置为Stretch也不行。
zyf_c_s_d_n 2014-03-20
  • 打赏
  • 举报
回复
<Grid>
        <Button Content="添加" Height="23" HorizontalAlignment="Left" Margin="205,167,0,0" Name="btnAddEdit" VerticalAlignment="Top" Width="75" TabIndex="6" IsDefault="True" Click="btnAddEdit_Click" />
        <Button Content="关闭" Height="23" HorizontalAlignment="Left" Margin="286,167,0,0" Name="btnClose" VerticalAlignment="Top" Width="75" TabIndex="7" Click="btnClose_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="42,9,0,0" Name="txtName" VerticalAlignment="Top" Width="120" MaxLength="20" TabIndex="1" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBlock1" Text="姓名" VerticalAlignment="Top" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="186,12,0,0" Name="textBlock2" Text="出生日期" VerticalAlignment="Top" />
        <DatePicker Height="25" HorizontalAlignment="Left" Margin="241,8,0,0" Name="dpBirthDay" VerticalAlignment="Top" Width="120" TabIndex="2" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,49,0,0" Name="textBlock3" Text="级别" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="42,46,0,0" Name="txtLv" VerticalAlignment="Top" Width="120" MaxLength="1" TabIndex="3" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="241,46,0,0" Name="txtTelNum" VerticalAlignment="Top" Width="120" MaxLength="11" TabIndex="4" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="186,49,0,0" Name="textBlock4" Text="手机号码" VerticalAlignment="Top" />
        <TextBox Height="55" HorizontalAlignment="Left" Margin="42,81,0,0" Name="txtAddress" VerticalAlignment="Top" Width="319" MaxLength="80" TabIndex="5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,84,0,0" Name="textBlock5" Text="地址" VerticalAlignment="Top" />
        <Separator Height="10" HorizontalAlignment="Left" Margin="12,149,0,0" Name="separator1" VerticalAlignment="Top" Width="349" />
    </Grid>
这是代码,应该怎么设置?界面就一个默认的的Grid,没添加任何布局。
欢乐的小猪 2014-03-20
  • 打赏
  • 举报
回复
margin horizonalignment 设置的对不
欢乐的小猪 2014-03-20
  • 打赏
  • 举报
回复
vs2013自带blend编辑工具
zyf_c_s_d_n 2014-03-20
  • 打赏
  • 举报
回复
还有其他的答案吗?
公西雒 2014-03-20
  • 打赏
  • 举报
回复
下载个Blend,完美解决布局设计问题,WPF必备。
exception92 2014-03-20
  • 打赏
  • 举报
回复
嵌套的控件 水平,垂直均拉伸。
zyf_c_s_d_n 2014-03-20
  • 打赏
  • 举报
回复
引用 4 楼 danding_ge 的回复:
下载个Blend,完美解决布局设计问题,WPF必备。
你提供的方法还是没有解决问题,看来我还是得研究一下blend了,不知道容易上手吗
zyf_c_s_d_n 2014-03-20
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
嵌套的控件 水平,垂直均拉伸。
你提供的方法还是没有解决问题,看来我还是得研究一下blend了,不知道容易上手吗
zyf_c_s_d_n 2014-03-20
  • 打赏
  • 举报
回复
引用 10 楼 u011182647 的回复:
你设置控件的水平位置的left?
没懂你的意思,请指点一下
公西雒 2014-03-20
  • 打赏
  • 举报
回复
引用 12 楼 kingknght 的回复:
楼上你这布局完全按照WinForm思路来的 你这么把Width,Height写死的,碰上不同的分辨率和DPI的显示难免显示不大一样
哦?哪里显示不一样?
kingknght 2014-03-20
  • 打赏
  • 举报
回复
楼上你这布局完全按照WinForm思路来的 你这么把Width,Height写死的,碰上不同的分辨率和DPI的显示难免显示不大一样
公西雒 2014-03-20
  • 打赏
  • 举报
回复
引用 8 楼 zyf_c_s_d_n 的回复:
<Grid>
        <Button Content="添加" Height="23" HorizontalAlignment="Left" Margin="205,167,0,0" Name="btnAddEdit" VerticalAlignment="Top" Width="75" TabIndex="6" IsDefault="True" Click="btnAddEdit_Click" />
        <Button Content="关闭" Height="23" HorizontalAlignment="Left" Margin="286,167,0,0" Name="btnClose" VerticalAlignment="Top" Width="75" TabIndex="7" Click="btnClose_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="42,9,0,0" Name="txtName" VerticalAlignment="Top" Width="120" MaxLength="20" TabIndex="1" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBlock1" Text="姓名" VerticalAlignment="Top" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="186,12,0,0" Name="textBlock2" Text="出生日期" VerticalAlignment="Top" />
        <DatePicker Height="25" HorizontalAlignment="Left" Margin="241,8,0,0" Name="dpBirthDay" VerticalAlignment="Top" Width="120" TabIndex="2" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,49,0,0" Name="textBlock3" Text="级别" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="42,46,0,0" Name="txtLv" VerticalAlignment="Top" Width="120" MaxLength="1" TabIndex="3" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="241,46,0,0" Name="txtTelNum" VerticalAlignment="Top" Width="120" MaxLength="11" TabIndex="4" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="186,49,0,0" Name="textBlock4" Text="手机号码" VerticalAlignment="Top" />
        <TextBox Height="55" HorizontalAlignment="Left" Margin="42,81,0,0" Name="txtAddress" VerticalAlignment="Top" Width="319" MaxLength="80" TabIndex="5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,84,0,0" Name="textBlock5" Text="地址" VerticalAlignment="Top" />
        <Separator Height="10" HorizontalAlignment="Left" Margin="12,149,0,0" Name="separator1" VerticalAlignment="Top" Width="349" />
    </Grid>
这是代码,应该怎么设置?界面就一个默认的的Grid,没添加任何布局。
HorizontalAlignment="Left",靠左对齐;VerticalAlignment="Top" ,从上对齐。你的问题出现的原因是你的整个window比grid稍大,缩小window的尺寸可以解决这个问题,但是这种方法治标不治本。我上面给你推荐了blend,看来你没有往心里去,你用了它肯定能帮助你更好的理解XAML语言。算了,你的问题可以这样解决:在grid外层加<Viewbox Stretch="Fill">,即:
	<Viewbox Stretch="Fill">
		<Grid Height="196" Width="372">
			<Button Content="添加" Height="23" HorizontalAlignment="Left" Margin="205,167,0,0" x:Name="btnAddEdit" VerticalAlignment="Top" Width="75" TabIndex="6" IsDefault="True" />
			<Button Content="关闭" Height="23" HorizontalAlignment="Left" Margin="286,167,0,0" x:Name="btnClose" VerticalAlignment="Top" Width="75" TabIndex="7" />
			<TextBox Height="23" HorizontalAlignment="Left" Margin="42,9,0,0" x:Name="txtName" VerticalAlignment="Top" Width="120" MaxLength="20" TabIndex="1" />
			<TextBlock Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" x:Name="textBlock1" Text="姓名" VerticalAlignment="Top" />
			<TextBlock Height="23" HorizontalAlignment="Left" Margin="186,12,0,0" x:Name="textBlock2" Text="出生日期" VerticalAlignment="Top" />
			<DatePicker Height="25" HorizontalAlignment="Left" Margin="241,8,0,0" x:Name="dpBirthDay" VerticalAlignment="Top" Width="120" TabIndex="2" />
			<TextBlock Height="23" HorizontalAlignment="Left" Margin="12,49,0,0" x:Name="textBlock3" Text="级别" VerticalAlignment="Top" />
			<TextBox Height="23" HorizontalAlignment="Left" Margin="42,46,0,0" x:Name="txtLv" VerticalAlignment="Top" Width="120" MaxLength="1" TabIndex="3" />
			<TextBox Height="23" HorizontalAlignment="Left" Margin="241,46,0,0" x:Name="txtTelNum" VerticalAlignment="Top" Width="120" MaxLength="11" TabIndex="4" />
			<TextBlock Height="23" HorizontalAlignment="Left" Margin="186,49,0,0" x:Name="textBlock4" Text="手机号码" VerticalAlignment="Top" />
			<TextBox Height="55" HorizontalAlignment="Left" Margin="42,81,0,0" x:Name="txtAddress" VerticalAlignment="Top" Width="319" MaxLength="80" TabIndex="5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" />
			<TextBlock Height="23" HorizontalAlignment="Left" Margin="12,84,0,0" x:Name="textBlock5" Text="地址" VerticalAlignment="Top" />
			<Separator Height="10" HorizontalAlignment="Left" Margin="12,149,0,0" x:Name="separator1" VerticalAlignment="Top" Width="349" />
		</Grid>
	</Viewbox>
小恒丶 2014-03-20
  • 打赏
  • 举报
回复
你设置控件的水平位置的left?
zyf_c_s_d_n 2014-03-19
  • 打赏
  • 举报
回复
帮帮忙呀大哥们!
zyf_c_s_d_n 2014-03-19
  • 打赏
  • 举报
回复

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧