首页 > 解决方案 > wpf根据孩子缩放画布宽度

问题描述

我有一个Canvasinside a Grid, on acolumndefinition的 Width Auto。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>

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

标签: c#wpfwindows

解决方案


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

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

Canvas如果你出于某种原因仍然想使用。您可以绑定WidthTextBox. 喜欢,

<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>

推荐阅读