【问题标题】:How to get the value of the margin of a border?如何获取边框边距的值?
【发布时间】:2012-10-04 16:32:08
【问题描述】:

我是 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)));

【问题讨论】:

    标签: wpf wpf-controls wpfdatagrid


    【解决方案1】:

    标记为imageBorder 的边框没有将其Margin 属性设置为任何值,因此您将获得默认的Margin,即0。

    要在命名边框内获取 Border 的 Margin 属性,请给它一个 x:Name 以便您可以在后面的代码中访问它,或者查看 imageBorder.Child 属性以找到子 Border 对象,然后将其转换为FrameworkElement 获取其 Margin 属性。

    至于你为什么得到{0,0,0,0}Margin 属性是Thickness 类型,它由Left、Top、Right 和Bottom 的属性组成。如果您将边距设置为单个值,例如 2,它会自动将其转换为 Thickness 对象,其所有 4 个属性都设置为 2。

    【讨论】:

    • 谢谢,我会明确写下代码以防万一有一天别人找到它
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2017-02-16
    • 2012-12-25
    • 1970-01-01
    • 2012-10-26
    • 2014-03-25
    • 2015-06-10
    • 2014-01-25
    相关资源
    最近更新 更多