【问题标题】:wpf scale canvas width based on childrenwpf根据孩子缩放画布宽度
【发布时间】:2018-09-24 13:27:57
【问题描述】:

我在Grid 内有一个Canvas,在宽度为Autocolumndefinition 上。 Canvas 不会自动放大以容纳其元素。它的宽度始终保持zero。我必须手动硬编码宽度。

<Grid Height="35"
      HorizontalAlignment="Right"
      MouseEnter="floater_MouseEnter"
      MouseLeave="floater_MouseLeave"
      >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <Canvas Grid.Column="1"
            Background="White"
            Height="32.7"
            VerticalAlignment="Top"
            Visibility="Visible"
            >
        <TextBlock Text="asdfsdf" FontSize="23"/>
    </Canvas>
</Grid>

我希望画布的宽度根据元素进行缩放。我该怎么办?

【问题讨论】:

  • 这是在选择 Canvas 而不是 Grid 时可以预料到的。 Canvas 用于绝对定位,它不会随其子级增长或收缩。简单的解决方法是用 Grid 替换它。

标签: c# wpf windows


【解决方案1】:

Canvas 不会以这种方式工作。来自MSDN

Canvas 是唯一没有固有布局的面板元素 特征。画布具有默认的高度和宽度属性 零,除非它是自动调整大小的元素的子元素 它的子元素。 Canvas 的子元素永远不会调整大小,它们 只是定位在他们指定的坐标。这提供了 在固有尺寸限制或 不需要或不需要对齐。对于您想要孩子的情况 要自动调整大小和对齐的内容,通常最好 使用 Grid 元素。

如果您出于某种原因仍想使用Canvas。您可以绑定到TextBoxWidth。喜欢,

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Canvas Grid.Column="1" Background="Green" Width="{Binding Path=ActualWidth, ElementName=text}">
        <TextBlock Text="asdfsdf" FontSize="23" x:Name="text"/>
    </Canvas>
</Grid>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2019-11-05
    • 2016-11-02
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多