【发布时间】:2013-05-12 22:38:06
【问题描述】:
我正在尝试获取当前单元格的整个宽度,以便绘制一个宽度为该单元格一定百分比的矩形。正如here 所建议的那样,我无法多次绑定设置 Width 属性。所以我的下一个尝试是将网格与 UtilPct 传递给转换器,减去 150(第一列)并返回我的宽度。但是,网格没有宽度,它只是在 Snoop 中说 NaN,实际宽度为 0?
获取单元格实际计算宽度以便调整矩形宽度的最佳方法是什么?如果有人有任何其他方法,我很感激任何帮助!
XAML:
<ItemsControl x:Name="icBrokerCreditList" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Path=BrokerCreditList}" HorizontalAlignment="Stretch">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch" x:Name="brokerGrid">
<Grid.RowDefinitions>
<RowDefinition Height="20"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition x:Name="utilCol" Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Background="White" Foreground="Black" FontSize="12" Text="{Binding Path=BrokerName}"></TextBlock>
<Rectangle Fill="Green" Height="20" Grid.Row="0" Grid.Column="1">
<Rectangle.Width>
<MultiBinding Converter="{StaticResource PercentageConverter}">
<Binding Path="ActualWidth" ElementName="utilCol" />
<Binding Path="UtilPct" />
</MultiBinding>
</Rectangle.Width>
</Rectangle>
</TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
【问题讨论】:
-
这是Why ActualSize is not updating its value on WPF? 的副本。 ColumnDefinition 不继承自 FrameworkElement,因此它的 ActualWidth 不是 DependencyProperty,这意味着您的绑定在更改时将永远不会更新。但是,您可以按照 Robert Levy's 的建议使用 TextBlock 的 ActualWidth。