2013-05-16 76 views
1

我想基於綁定數據源使用動態Width顯示Rectangle。我最初考慮使用Converter,但無法綁定到轉換器參數以獲取讀動態寬度。將柵格列寬設置爲Bound Perctange

我最近的嘗試是將父列綁定到UtilPct屬性,這是我的BrokerCredit對象中的一個小數。我認爲這是使用十進制值作爲絕對值而不是百分比顯示。

我該怎麼做呢?根據UtilPct中的百分比,我希望我的Rectangle或父列佔用總列寬的百分比。我對WPF還很新,所以我很感激任何幫助!提前致謝。

XAML:

<ItemsControl x:Name="icBrokerCreditList" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Path=BrokerCreditList}" HorizontalAlignment="Stretch"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid HorizontalAlignment="Stretch"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="20"></RowDefinition> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="150"></ColumnDefinition> 
        <ColumnDefinition x:Name="utilizationColumn" Width="{Binding Path=UtilPct}"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Row="0" Grid.Column="0" Background="White" Foreground="Black" FontSize="12" Text="{Binding Path=BrokerName}"></TextBlock> 
       <Rectangle Width="auto" Fill="Green" Height="20" Grid.Row="0" Grid.Column="1"> 
        <!--"{Binding Converter={StaticResource PercentageConverter}, 
             ElementName=utilizationColumn, Path=Width, ConverterParameter=.1}"-->       
       </Rectangle> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

回答

2

你可以使用IMultiValue轉換器,這樣你可以在Width傳遞和Precentage這樣就可以計算出列的寬度。

例子:

轉換器:

public class PercentageConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (values[0] is double && values[1] is double) 
     { 
      return (((double)values[0])/100) * ((double)values[1]); 
     } 
     return values[0]; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

的XAML:

<Rectangle Width="auto" Fill="Green" Height="20" Grid.Row="0" Grid.Column="1"> 
    <Rectangle.Width> 
     <MultiBinding Converter="{StaticResource PercentageConverter}"> 
      <Binding Path="Width" /> 
      <Binding Path="UtilPct" /> 
     </MultiBinding> 
    </Rectangle.Width> 
</Rectangle> 
+0

不錯!我甚至不知道多重綁定!謝謝@ sa_ddam213 – user576838

+0

@ ss_ddam213 - 看起來我不能一次設置寬度,所以我嘗試使用columndefinition的寬度 - 但它沒有傳入實際的寬度值。 – user576838