wpf找不到控件坐标信息

时间:2016-07-15 14:44:02

标签: wpf visual-studio combobox controls

我有一个包含堆栈面板的Group Box,其中包含一个组合框(A)和一个文本框。我有另一个堆栈面板(B),其中包含一个组合框和一个标签。 我会使用xaml代码将组合框B放在与组合框A(相同的y)相同的级别上。 请注意,GroupBox和Stack Panel(B)放在同一行,不同列的网格中。

我正在尝试将组合框(B)的y坐标绑定到组合框(A)的y坐标。

我可以在Visual Studio属性窗口中找到wpf控件的坐标信息吗?

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <GroupBox Name="AGroupBox" Grid.Row="1" Grid.Column="0"  >
        <GroupBox.Header>
            <Label Content="GroupBox" FontWeight="Bold" />
        </GroupBox.Header>
        <StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal">
            <ComboBox x:Name="ComboBoxA" Width="100" Height="25" VerticalAlignment="Center"/>
            <TextBlock x:Name="TextBlockA" Width="150" VerticalAlignment="Center" Margin="10,0,0,0" Text="This a Test" />
        </StackPanel>
    </GroupBox>

    <StackPanel Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left">
        <Label x:Name="LabelB" Content="LabelB"  />
        <ComboBox x:Name="ComboBoxB" Width="150" Height="25"/>
    </StackPanel>
</Grid>

1 个答案:

答案 0 :(得分:0)

使用y坐标的近似值将使用Margin属性...但是在第一次调整大小后它将会中断。

我认为,可以在调整大小时更新Margin,但我会从更复杂的布局开始,如下所示:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

   <!--additional Grid used to position comboBoxes on the same height-->
    <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <!--group box is used as cover for the 1st column-->
        <GroupBox Name="AGroupBox" 
                  Grid.Row="0" Grid.RowSpan="3" Grid.Column="0"  >
            <GroupBox.Header>
                <Label Content="GroupBox" FontWeight="Bold" />
            </GroupBox.Header>
        </GroupBox>

        <!--stack panel with ComboBoxA is centered vertically in the 1st column-->
        <StackPanel Grid.Row="1" Grid.Column="0" 
                    Margin="5,0"
                    Orientation="Horizontal">
            <ComboBox x:Name="ComboBoxA" Width="100" Height="25" VerticalAlignment="Center"/>
            <TextBlock x:Name="TextBlockA" Width="150" VerticalAlignment="Center" Margin="10,0,0,0" Text="This a Test" />
        </StackPanel>

        <!--ComboBoxB is centered vertically in the 2nd column-->
        <ComboBox x:Name="ComboBoxB" 
                  Grid.Row="1" Grid.Column="1" 
                  VerticalAlignment="Top" HorizontalAlignment="Left"
                  Width="150" Height="25"/>

        <!--Label attached on top of ComboBoxB-->
        <Label x:Name="LabelB" Content="LabelB" 
               Grid.Row="0" Grid.Column="1" VerticalAlignment="Bottom"/>
    </Grid>
</Grid>