经过一番调查,我仍然无法找到改变控制起源的方法。 因此,我只想将一个正方形放置在另一个正方形的中心,没有边距,因此它将完全独立于第一个正方形尺寸。
理论上,可以通过将override func viewDidLoad() {
super.viewDidLoad()
var fetch = NSFetchRequest(entityName: "AppConfig")
var appConfigs = managedObjectContext.executeFetchRequest(fetch, error: error) as! [AppConfig]
if let appConfig = appConfigs.first{
//App has already launched before
}else{
//Create a new AppConfig Object and save it in CoreData
//Present your FirstLaunch Controller
}
return nil
}
和HorizontalAlignment
设置为VerticalAlignment
轻松完成,因为它会自动将Center
控件设置为父控件宽度和高度的一半。但事实并非如此简单。
描述问题的最简单方法是下一张图片
如您所见,保证金计入左上角。这就是我所说的起源。完美的解决方案是将其更改为第一个正方形的中心,但这是我需要帮助的地方 - 我该怎么做?
答案 0 :(得分:2)
使用变换对象并将变换附加到控件时,将应用原点。它实际上不会影响边距或左边顶部属性的行为。如果使用变换来放置对象,则原点非常有用。
顶部,左边(如果使用cavas)和边距(如果使用说网格)有助于管理" auto"由父控件放置,这又控制控件的原点相对于父控件的位置。然后,变换对象将RELATIVE偏移到原点的位置。
另一个有用的东西是转换会覆盖父控件中的自动放置,或者更确切地说,强制偏移到父想要放置它的位置,这在某些情况下是有用的 - 也就是说,您可能在网格,并希望他们"摇"当你将鼠标悬停在它们上方时左右移动,它们的对齐方式保持在网格中,但是变换可以让它们远离它们的强制"位置。
例如,将相同的变换对象附加到2个控件,并将它们的原点分开,然后将动画应用于变换对象 - 两个控件都将为一个动画对象设置动画(如果您希望它们以完美同步方式移动) 。
答案 1 :(得分:1)
嗯,这很奇怪。只有在使用Image
和Center
对齐时才能看到给定的行为。可以通过在Image
中包裹Grid
,使用Center
对齐,或使用Stretch
与Image
对齐(这更简单)来解决。
<Grid Width="500" Height="500">
<Image Width="250" Height="250" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</Grid>
如果您想重现我所描述的问题,请在上面的代码中将Stretch
替换为Center
。
答案 2 :(得分:0)
这里可能过于简单了,但我会用一个网格来包装你提到的两个项目,例如这个例子(一个伸展到适合,一个居中):
<Grid>
<Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Black" BorderThickness="10" Margin="4"/>
<Button HorizontalAlignment="Center" VerticalAlignment="Center" Padding="10">InnerButton</Button>
</Grid>