当旁边的标签改变宽度时,如何使按钮移动?

时间:2013-05-25 21:25:28

标签: c# wpf silverlight

我觉得这是我可以用网格(或者可能是水平堆栈面板)做的事情,但我想知道是否有更简单的方法来做到这一点。这是在Silverlight页面上,虽然我假设WPF的解决方案也可以正常工作。在顶部,我有一个标签,以页面为中心,显示当前页面的标题。这个标签的左边是一个按钮。由于标签的文本可以是任何内容,因此在保持居中的同时,它可以是400像素到50像素宽。是否有一种简单的方法可以使按钮始终位于标签左边缘的左侧20个像素处?

2 个答案:

答案 0 :(得分:4)

以下XAML执行此操作:

<StackPanel>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Button Grid.Column="0" Content="Button"
                HorizontalAlignment="Right" Margin="0,0,20,0"/>
        <Label Grid.Column="1" Content="Some Text in a Label"/>
    </Grid>
</StackPanel>

只要标签的宽度发生变化,网格就会重新定位按钮。不需要经常调用的更新方法。

答案 1 :(得分:2)

您应该只需调用一个函数来定位按钮。在重新调整标签大小的每个地方之后调用此方法。

public void RepositionButton(int horizontalSpacing)
{
    int newXPos = lblLabel.Position.X - btnButton.Width - horizontalSpacing;
    int newYPos = lblLabel.Position.Y;

    btnButton.Position = new Point(newXPos, newYPos);
}

如果需要垂直居中,您可能需要修改Y位置的数学运算。