gpt4 book ai didi

c# - 如何绑定(bind)到控件的文字实际宽度(包括其边距)?

转载 作者:太空狗 更新时间:2023-10-29 22:26:12 26 4
gpt4 key购买 nike

根据 some folks实际宽度 是使用 ActualWidth 属性获得的,如下例所示。这是有道理的,但我似乎遇到了矛盾的行为。

<Canvas Width="{Binding ActualWidth,ElementName=Expy}">
<Expander x:Name="Expy"
HorizontalAlignment="Left"
Margin="0,0,0,0"
VerticalAlignment="Top" ...>
...
</Expander>
</Canvas>

在上面的设置中,行为与预期一致,尽管紧紧挤压在一起,但包含 Canvas 的面板中的下一个元素没有与其前一个元素重叠。

但是,如果我将边距更改得更宽一些,我可以清楚地看到 Canvas 侵入了下一个元素,估计与我在边距属性中请求的小 Sprite 数量相同。所以看起来 ActualWidth 不是实际 宽度,而是没有边距的宽度。

  1. 我在这里是不是混淆了什么?如果是,是什么?
  2. 如何获取并绑定(bind)到实际实际呈现的宽度?

enter image description here

最佳答案

链接的答案是:

ActualWidth accounts for padding and margins ...

这是不正确的。 ActualWidth 包括 内边距,不包括边距(与 ActualHeight 相同)。

其他人对该答案留下的评论提供了适当的更正。


此 XAML 代码说明了这个问题:

<Window x:Class="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<TextBlock x:Name="First" Text="Some text" Padding="10" Margin="0,0"
HorizontalAlignment="Left" Background="Yellow" />
<TextBlock Text="{Binding ActualWidth, ElementName=First}" />

<TextBlock x:Name="Second" Text="Some text" Padding="10" Margin="10,0"
HorizontalAlignment="Left" Background="LimeGreen" />
<TextBlock Text="{Binding ActualWidth, ElementName=Second}" />
</StackPanel>
</Window>

如果运行此程序,您将看到两个“Some text”文本 block 具有相同的 ActualWidth 值,尽管第二个文本 block 应用了水平边距。


您询问了如何考虑到这一点。无法通过绑定(bind)来完成此操作,因为 ActualWidth 属性不包括已声明的边距。您可以做的是将边距应用到父元素( Canvas ),而不是应用到扩展器。

换句话说,不是这样做:

<Canvas Width="{Binding ActualWidth,ElementName=Expy}">
<Expander x:Name="Expy" ... Margin="10" ... >
...
</Expander>
</Canvas>

这样做:

<Canvas Width="{Binding ActualWidth,ElementName=Expy}" Margin="10">
<Expander x:Name="Expy" ... >
...
</Expander>
</Canvas>

关于c# - 如何绑定(bind)到控件的文字实际宽度(包括其边距)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28362036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com