2013-05-17 3 views
0

Я пытаюсь получить всю ширину для текущей ячейки, поэтому я могу нарисовать прямоугольник с шириной определенного процента этой ячейки. Я не смог связать, чтобы установить свойство Width более одного раза, как было предложено here. Поэтому моя следующая попытка состояла в том, чтобы передать сетку с UtilPct в конвертер, вычесть 150 (для первого столбца) и вернуть мою ширину. Тем не менее, сетка не имеет ширины, она просто говорит NaN в Snoop, а фактическая ширина равна 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> 
+0

Это дубликат [Почему ActualSize не обновляет его значение в WPF?] (Http://stackoverflow.com/questions/9008525/why-actualsize-is-not-updating-its-value-on-wpf). ColumnDefinition не наследует от FrameworkElement, поэтому ActualWidth не является DependencyProperty, то есть ваша привязка никогда не будет обновляться, когда она изменится. Вы можете использовать ActualWidth вашего TextBlock, однако, в соответствии с предложением [Robert Levy's] (http://stackoverflow.com/a/9008962/211627). – JDB

ответ

1

Вы можете использовать ScaleTransform для Rectangle 's RenderTransform и привязать ScaleTransform' X свойством s на ваш процент вместо установки ширины.

Примечание: это приведет к выравниванию по левому краю Rectangle, так как свойство CenterX ScaleTransform по умолчанию равно 0. К сожалению, он использует абсолютные значения вместо процентов, поэтому вы не можете использовать CenterX с неизвестной шириной для выравнивания по правому краю. Вам нужно будет создать третий столбец с шириной, установленной на «Авто», и поместите там Rectangle. Чтобы выровнять по правому краю, установите RenderTransformOrigin равным «1,0».

Примечание: если ваш процент представляет собой процент (т. Е. [0-100]%, «55%»), вам необходимо передать его через конвертер, чтобы разделить его на 100, чтобы получить правильный масштаб.

Смежные вопросы