WPF控制原点

时间:2015-08-11 15:42:46

标签: wpf xaml

经过一番调查,我仍然无法找到改变控制起源的方法。 因此,我只想将一个正方形放置在另一个正方形的中心,没有边距,因此它将完全独立于第一个正方形尺寸。

理论上,可以通过将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控件设置为父控件宽度和高度的一半。但事实并非如此简单。 描述问题的最简单方法是下一张图片Example

如您所见,保证金计入左上角。这就是我所说的起源。完美的解决方案是将其更改为第一个正方形的中心,但这是我需要帮助的地方 - 我该怎么做

3 个答案:

答案 0 :(得分:2)

使用变换对象并将变换附加到控件时,将应用原点。它实际上不会影响边距或左边顶部属性的行为。如果使用变换来放置对象,则原点非常有用。

顶部,左边(如果使用cavas)和边距(如果使用说网格)有助于管理" auto"由父控件放置,这又控制控件的原点相对于父控件的位置。然后,变换对象将RELATIVE偏移到原点的位置。

另一个有用的东西是转换会覆盖父控件中的自动放置,或者更确切地说,强制偏移到父想要放置它的位置,这在某些情况下是有用的 - 也就是说,您可能在网格,并希望他们"摇"当你将鼠标悬停在它们上方时左右移动,它们的对齐方式保持在网格中,但是变换可以让它们远离它们的强制"位置。

例如,将相同的变换对象附加到2个控件,并将它们的原点分开,然后将动画应用于变换对象 - 两个控件都将为一个动画对象设置动画(如果您希望它们以完美同步方式移动) 。

答案 1 :(得分:1)

嗯,这很奇怪。只有在使用ImageCenter对齐时才能看到给定的行为。可以通过在Image中包裹Grid,使用Center对齐,或使用StretchImage对齐(这更简单)来解决。

<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>