具有与先前Grid.Column中的UIElement相同高度的图像的按钮

时间:2015-12-12 19:13:57

标签: c# wpf

我对WPF很新,所以请耐心等待。 我想用旁边的按钮显示组合框。按钮将包含图像。图像尺寸为64x64。我想将组合框高度作为整个网格行的主高度。我需要强制按钮与图像一起高度与组合框一样高。我不想指定任何硬编码值(稍后我将使用DevExpress主题)。

我想我有工作解决方案(至少在运行时),但我想咨询更有经验的人。解决方案基于按钮高度绑定到组合框ActualHeight。这在运行时很好用。但在设计时,按钮尺寸要大得多(它以原始尺寸显示图像)。

我的解决方案是推荐的吗?如何解决设计时间问题?我在设计时看到了一些我在运行时看不到的东西让我发疯。

我正在使用VS 2015社区版

XAML

class DenseFeatureDetector : public FeatureDetector
    {
    public:
            DenseFeatureDetector( float initFeatureScale=1.f, int featureScaleLevels=1,
                          float featureScaleMul=0.1f,
                          int initXyStep=6, int initImgBound=0,
                          bool varyXyStepWithScale=true,
                          bool varyImgBoundWithScale=false );
    protected:
    ...
};

图像 - 设计时/运行时

Design time / run time

谢谢,

1 个答案:

答案 0 :(得分:0)

这个问题可以通过Canvas解决。画布不会根据内容更改其大小,因此它可以包含比画布更大的内容,并且画布不会更改画布所在的网格的行/列的高度/宽度。因此,按钮与图像高度的绑定在运行时甚至在设计时就像奇迹一样。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="160"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition />
        <RowDefinition/>
    </Grid.RowDefinitions>
    <ComboBox x:Name="Cbx"  Grid.Column="0" Grid.Row="0"/>
    <Canvas Grid.Column="1" Grid.Row="0" Width="{Binding ElementName=Cbx, Path=ActualHeight}">
        <Button Height="{Binding ElementName=Cbx, Path=ActualHeight}">
            <Image Source="Play.png"/>
        </Button>
    </Canvas>
    <Label Content="Hello" Grid.Column="0" Grid.Row="1"/>
    <Label Content="Big Hello" Grid.Column="0" Grid.Row="2" FontSize="15"/>
</Grid>