Wpf 获取转换器的父元素宽度

Wpf 获取转换器的父元素宽度,wpf,xaml,Wpf,Xaml,我试图得到当前单元格的整个宽度,这样我就可以画一个宽度为该单元格某个百分比的矩形。正如建议的那样,我无法多次绑定设置Width属性。因此,我的下一个尝试是将带有和UtilPct的网格传递给转换器,减去150(对于第一列)并返回我的宽度。然而,网格没有宽度,它只是在Snoop中说NaN,实际宽度是0 获取单元格的实际计算宽度以便调整矩形宽度的最佳方法是什么?如果有人有任何其他方法,我感谢任何帮助 XAML: 您可以使用ScaleTransform进行矩形的渲染转换,并将ScaleTransform

我试图得到当前单元格的整个宽度,这样我就可以画一个宽度为该单元格某个百分比的矩形。正如建议的那样,我无法多次绑定设置Width属性。因此,我的下一个尝试是将带有和UtilPct的网格传递给转换器,减去150(对于第一列)并返回我的宽度。然而,网格没有宽度,它只是在Snoop中说NaN,实际宽度是0

获取单元格的实际计算宽度以便调整矩形宽度的最佳方法是什么?如果有人有任何其他方法,我感谢任何帮助

XAML:


您可以使用
ScaleTransform
进行
矩形的渲染转换,并将
ScaleTransform
的X属性绑定到您的百分比,而不是设置宽度

注意:这将左对齐
矩形
,因为
ScaleTransform
CenterX属性默认为0。不幸的是,它使用绝对值而不是百分比,因此无法使用宽度未知的CenterX进行右对齐。您必须创建一个宽度设置为“Auto”的第三列,并将
矩形放入其中。要右对齐,请将RenderTransferMorigin设置为“1,0”

注意:如果您的百分比实际上是一个百分比(即[0-100],“55%”),则必须通过转换器将其除以100以获得适当的比例。

这是的副本。ColumnDefinition不从FrameworkElement继承,因此它的实际宽度不是DependencyProperty,这意味着绑定在更改时永远不会更新。但是,根据建议,您可以使用文本块的实际宽度。
<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>