我有以下代码:
<Window x:Class="UnderstandSizing.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" x:Name="Column1" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Grid.Column="0" Text="{Binding ActualWidth,ElementName=Column1,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我希望在文本框中看到列Column1的宽度值,但我能看到的只有0.
我已经看到了这个和这个,但到处说,仅涉及的Silverlight,WPF没有.
编辑 修正了一个错字.另请注意,"输出"窗口不显示任何绑定问题.对我来说很奇怪的是它在设计师中工作.它仅在运行时停止工作.
有趣...
正如DanM发现的那样,ColumnDefinition.ActualWidth不是依赖属性,所以当它更改时你不会得到绑定更新.
解决方法是将隐藏控件放在列中并绑定到它的ActualWidth,如下所示:
<ContentControl Visibility="Hidden" Grid.Column="0" HorizontalAlignment="Stretch" x:Name="hidden"/>
<TextBox Grid.Column="0" Text="{Binding ActualWidth,ElementName=hidden,Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)
这不是循环引用吗?“Column1”的宽度取决于Text
您的TextBox
,而Text
您的TextBox
则取决于“Column1”的宽度。我不明白 WPF 如何可能解析此值,除非您明确设置“Column1”或您的TextBox
.
编辑
哦,我明白问题所在了。ActualWidth
不是double
依赖属性,因此在计算值时您将永远不会收到更新。
您需要使用 @Robert Levy 的建议,在您占用的空间中放置一个虚拟控件TextBox
,然后绑定到ActualWidth
该控件。
归档时间: |
|
查看次数: |
3085 次 |
最近记录: |