正确调整WPF控件的大小以始终保持与其父

时间:2017-07-28 13:35:40

标签: c# .net wpf

我正在尝试为简单的WPF计算器应用程序创建按钮网格,但我无法正确绘制按钮。

我在Button(btnPlusMinus)中使用了一个Grid(grdPlusMinus) - 在整个控件网格(grdControls)中 - 这样我就可以在它的顶部制作一个带有简单Label的椭圆Button。椭圆应该填充Button的可见部分。

使用下面的代码时,椭圆的底部和右侧是"切断"无论窗口如何调整大小。椭圆始终是成比例的,但它永远不会完全显示。 当我将grdPlusMinus的宽度和高度重置为自动(通过VS UI而不是代码)时,它们都被设置为1,结果是grdPlusMinus - 因此其中的所有内容 - 缩小为单个像素。

我可能在基层做一些非常愚蠢的事情,但我无法想象它是什么。 我尝试了所有不同类型的绑定和设置 - 例如绑定到宽度而不是ActualWidth等 - 但我无法弄清楚我做错了什么。 我认为这可能是因为利润率,但完全取消保证金并没有多大改变。

有人能指出我一定做错了吗? (我尝试了Kaxaml中的XAML变体并遇到了同样的问题。)

如果有更好的做法 - 整体而言 - 我想要做的事情,那么我想听听,但我想知道这有什么问题。在我尝试其他任何事情之前 (我最终的意图是将每个按钮的高度和宽度设置为按钮的最小尺寸,以便它始终显示为按钮中心的圆圈,但以后会显示一些内容,除非这个额外的信息可以提供更好的解决方案。)

<Window x:Class="Calc.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Calc"
        mc:Ignorable="d"
        Title="MainWindow" Height="651.5" Width="525" WindowStartupLocation="CenterScreen">
    <Grid x:Name="grdControls">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Button x:Name="btnPlusMinus" Grid.Row="5" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{x:Null}" Margin="4">
            <Grid x:Name="grdPlusMinus" Width="{Binding ActualWidth, ElementName=btnPlusMinus, Mode=OneWay}" Height="{Binding ActualHeight, ElementName=btnPlusMinus, Mode=OneWay}">
                <Ellipse x:Name="ellipse" Stroke="#FF39A8DC" Fill="#FFA0D2E2"/>
                <Label x:Name="label" Content="XXX" HorizontalAlignment="Center" VerticalAlignment="Center" VerticalContentAlignment="Center" Foreground="#FF0A263A" HorizontalContentAlignment="Center"/>
            </Grid>
        </Button>

    </Grid>
</Window>

2 个答案:

答案 0 :(得分:0)

对不起,我无法解释为什么会发生这种情况,但我发现用这个替换按钮线可以达到理想的效果:

    <Button x:Name="btnPlusMinus" Grid.Row="5" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{x:Null}" Padding="-5">

注意边距由padding =“ - 5”

代替

答案 1 :(得分:0)

这就像问我为什么在我下飞机时我的雨伞不起作用。您的问题的简单答案不打算以这种方式使用。 XAML拥有有史以来最好的定位系统之一,因此使用它很容易(性能可能不太好,但你不必担心它)。

getSkills

以下是grid的工作原理。