2012-10-04 170 views
0

我是WPF的初学者,必须为某人的用户界面添加功能。这是代码的一部分。如何获取边界的边界值?

<Border BorderBrush="Black" BorderThickness="1" Grid.Row="1" > 
     <Grid Grid.Row="0"> 
      <Grid.RowDefinitions> 
       <RowDefinition></RowDefinition> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition></ColumnDefinition> 
       <ColumnDefinition Width="{Binding ElementName=passFailIndicator, Path=Width}"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Border Background="Black" local:StretchPanel.Proportion="1" Name="imageBorder" Grid.Column="0"> 
       <Border BorderThickness="1" Margin="2" BorderBrush="Green" HorizontalAlignment="Left" VerticalAlignment="Top" Width="{Binding ElementName=imageBorder, Path=Width}"> 
        <Grid Width="{Binding ElementName=imageBorder, Path=Width}"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition/> 
          <ColumnDefinition Width="{Binding ElementName=imageSelectExpander, Path=Width}"/> 
         </Grid.ColumnDefinitions> 
         <Image Grid.Column="0" x:Name="image" Source="{Binding DisplayImage, Mode=OneWay}" VerticalAlignment="Top" Stretch="Uniform" HorizontalAlignment="Left" StretchDirection="Both" MouseMove="image_MouseMove" /> 
         <TextBlock Name="pxPos" Text="mouse position" HorizontalAlignment="Right" VerticalAlignment="Bottom" MaxHeight="20" Foreground="Aqua"></TextBlock> 
         <Expander Grid.Column="1" VerticalAlignment="Top" Name="imageSelectExpander"> 
          <ComboBox x:Name="imageSelect" ItemsSource="{Binding AvailableImages, Mode=OneWay}" SelectedIndex="{Binding ImageSelect, Mode=TwoWay}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="4" Padding="4" MaxHeight="40"></ComboBox> 
         </Expander> 
        </Grid> 
       </Border> 
      </Border> 
      <Border x:Name="passFailIndicator" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" Width="100" Height="100"> 
       <Viewbox Stretch="Uniform" > 
        <Path Style="{Binding TestResult, Mode=OneWay, Converter={StaticResource testResultToPathStyle}}" Margin="2" /> 
       </Viewbox> 
      </Border> 
     </Grid> 
    </Border> 

我试图访问线10分的保证金=“2”当我使用this.imageBorder.Margin,我得到{0,0,0,0}。我将如何获得2(当然,这个值可能会改变)?

感谢

编辑:

FrameworkElement fe = (FrameworkElement)this.imageBorder.Child; 
      pxPos.Text = (string.Format("x:{0} y:{1}", (int)((double)(pt.X - fe.Margin.Left) * (double)this.image.Source.Width/this.image.ActualWidth), (int)((double)(pt.Y - fe.Margin.Top)*(double)this.image.Source.Height/this.image.ActualHeight))); 

回答

4

边境标记imageBorder没有它Margin属性设置为任何东西,所以你得到默认Margin,这是0

要获得边界内的边界的边界属性,可以给它一个x:Name,以便您可以在后面的代码中访问它,或者查看imageBorder.Child属性以查找chi ld边界对象,然后将其转换为FrameworkElement以获得其边距属性。

至于你为什么得到{0,0,0,0}Margin属性的类型为Thickness,其中包括左,上,右,底的属性。如果您将保证金设置为单个值(如2),则会自动将其转换为Thickness对象,并将其所有4个属性设置为2.

+0

谢谢,我会明确写下代码以防其他人一天寻找它 – Denis