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 行目の Margin="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

1 に答える 1

4

ラベルが付けられた Borderには、そのプロパティが何にも設定されimageBorderていないため、デフォルトの 0 が取得されます。MarginMargin

名前付きボーダー内の Border の Margin プロパティを取得するには、 を渡してx:Nameコード ビハインドでアクセスできるようにするか、imageBorder.Childプロパティを調べて子 Border オブジェクトを見つけ、それを にキャストしてFrameworkElementその Margin プロパティを取得します。

を取得している理由については{0,0,0,0}MarginプロパティのタイプがThicknessであり、これは Left、Top、Right、および Bottom のプロパティで構成されています。マージンを 2 などの単一の値に設定するThicknessと、4 つのプロパティすべてが 2 に設定されたオブジェクトに自動的に変換されます。

于 2012-10-04T16:50:41.327 に答える