Xaml 边框厚度如何影响UI控件的边距、填充或内容的宽度?
Xaml 边框厚度如何影响UI控件的边距、填充或内容的宽度?,xaml,uwp,Xaml,Uwp,BorderThickness如何影响Margin、Padding的宽度或UI控件的内容? 请参见下面的XAML 为什么TextBoxFirstName/Lastname的宽度为183+183+fudge factor=400的垂直StackPanel 为什么TextBoxCity/State/Zip宽度216+70+70+fudge factor=400垂直StackPanel 福吉系数是如何计算的 <!-- This code aligns perfectly on my Window
BorderThickness
如何影响Margin
、Padding
的宽度或UI控件的内容?请参见下面的XAML 为什么
TextBox
FirstName/Lastname的宽度为183+183+fudge factor=400的垂直StackPanel
为什么TextBox
City/State/Zip宽度216+70+70+fudge factor=400垂直StackPanel
福吉系数是如何计算的
<!-- This code aligns perfectly on my Windows 10... But, I had
to fudge the widths in ways i don't understand fully
in order to get it to look right... how does that work?-->
<Grid Background="OrangeRed">
<StackPanel Width="400" VerticalAlignment="Center" BorderBrush="Black"
BorderThickness="2" Background="AliceBlue" Padding="0,0,10,10">
<StackPanel Orientation="Horizontal" >
<TextBox Header="First Name" PlaceholderText="John"
Width="183" Margin="10,10,0,0" />
<TextBox Header="Last Name" PlaceholderText="Smith"
Width="183" Margin="10,10,0,0" />
</StackPanel>
<TextBox Header="Address1" PlaceholderText="1 main st"
Margin="10,10,0,0" />
<TextBox Header="Address2" PlaceholderText=""
Margin="10,10,0,0" />
<StackPanel Orientation="Horizontal">
<TextBox Header="City" PlaceholderText="Townville"
Width="216" Margin="10,10,0,0" />
<TextBox Header="State" PlaceholderText="XX" Width="70"
Margin="10,10,0,0" />
<TextBox Header="Zip" PlaceholderText="12345" Width="70"
Margin="10,10,0,0" />
</StackPanel>
</StackPanel>
</Grid>
我确信它很简单,我只是不知道如何将每行上的所有部分相加,使其加起来的容器宽度达到400:
填充+边框+内容+边距堆叠面板行上每个组件的边距。这个问题的答案比我想象的要复杂
Width
属性在创建控件的布局阶段使用。它告诉容器控件希望能够显示多少空间。BorderThickness
包含在控制宽度中
让我们计算一下。顶部的StackPanel
宽度为400
。它的每一侧都有2
的边框。它的右填充为10
。那就剩下386个了。名字和姓氏文本框
控件的每个左边距均为10
。也就是说,386-10-10=366
。现在如果我们除以366/2=183
对于下面的控件-400-4-10-10*3=356
,等于216+70+70
这似乎正是我们所需要的,并且给出了实验得到的值
但请等待:
即使计算结果完全正确,但如果您靠近姓氏字段的右边框,结果在我的设备上仍然有点偏离。会发生什么?输入缩放
我的屏幕具有150%的缩放比例。因为UWP是在高像素密度屏幕上构建的,所以您使用的所有值都不是实际像素,系统会自动执行必要的计算以使所有内容都适合。但是,在150%的缩放比例下,我们有一个问题。让我们做183*1.5=274.5
。这正好是半个像素,这是我们无法显示的。现在,操作系统是进行捏造的人!如果我运行应用程序并使用Live属性编辑器,我可以看到文本框
控件的实际渲染宽度不是183
,而是183.333
现在让我们计算一下183.333*1.5=274.9995~275
。因此,该系统又“伪造”了一个“实际”像素,以便能够显示控件。当然,这破坏了我们的布局,导致第二个控件的右边框可用空间减少了1个像素(实际像素数也增加到275个)
那么,如何避免所有这些问题呢
由于进行了缩放,Microsoft建议将所有内容对齐为4的倍数,这将使您的设计与4x4网格对齐,并使外观美观。此外,乘以.5
因子不会导致问题。边界也是安全的,因为它们是2
有效像素宽-2*.5=3
。理想情况下,你应该养成习惯,在整个应用程序中,所有宽度、边距和填充值都使用4的倍数,这将确保所有内容看起来清晰、清晰,并且没有视觉上的奇怪之处
只是确认一下,当我将边距更改为12个有效像素时,名字和姓氏文本框现在将为180像素宽,布局将看起来恰到好处