c# - wpf根据孩子缩放画布宽度
问题描述
我有一个Canvas
inside 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>
我希望画布的宽度根据元素进行缩放。我应该怎么办?
解决方案
Canvas
不会以这种方式工作。来自MSDN
Canvas 是唯一没有固有布局特征的面板元素。Canvas 的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。Canvas 的子元素永远不会调整大小,它们只是定位在指定的坐标处。这为不需要或不需要固有尺寸约束或对齐的情况提供了灵活性。对于您希望子内容自动调整大小和对齐的情况,通常最好使用 Grid 元素。
Canvas
如果你出于某种原因仍然想使用。您可以绑定Width
到TextBox
. 喜欢,
<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>
推荐阅读
- list - 如何在 Haskell 中对列表进行回文化?
- python - 直接从列表推导中获取列表(没有嵌套列表)
- c# - Unity 中的闪光效果
- shopify - Shopify 多种产品选项
- c++ - 类构造函数问题中的简单可变参数模板
- python - Celery .delay() 同步工作,不延迟
- android - 从 ListView 中删除项目而不更改相关数据库
- javascript - 如何遍历这个对象并以逗号分隔的方式显示它们?
- javascript - 如何使用 Web Crypto API 的 SubtleCrypto 验证签名的 JWT?
- html - 如何使用 CSS 操作 HTML 中表格标签的边框?