【问题标题】:Getting Parent Element Width for Converter获取转换器的父元素宽度
【发布时间】: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。

标签: wpf xaml


【解决方案1】:

您可以将ScaleTransform 用于Rectangle 的RenderTransform,并将ScaleTransform 的X 属性绑定到您的百分比,而不是设置宽度。

注意:这将使Rectangle 左对齐,因为ScaleTransform CenterX 属性默认为 0。不幸的是,它使用绝对值而不是百分比,因此您不能使用具有未知宽度的 CenterX 来右对齐. 您必须创建第三列,将 Width 设置为“Auto”并将Rectangle 放入其中。要右对齐,请将 RenderTransformOrigin 设置为“1,0”。 p>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 2015-09-21
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多