Wpf 将网格列宽度设置为绑定Perctange

Wpf 将网格列宽度设置为绑定Perctange,wpf,xaml,datatemplate,itemscontrol,ivalueconverter,Wpf,Xaml,Datatemplate,Itemscontrol,Ivalueconverter,我想显示一个基于绑定数据源的动态宽度为的矩形。我最初考虑使用转换器,但无法绑定到转换器参数以获得读取动态宽度 我最近的尝试是将父列绑定到UtilPct属性,该属性是我的BrokerCredit对象中的十进制。我认为这是使用十进制值作为绝对值,而不是百分比显示 我该怎么做呢?我希望我的矩形或父列根据UtilPct中的百分比占据总列宽的百分比。我还是WPF的新手,所以我非常感谢您的帮助!提前谢谢 XAML: 您可以使用IMultiValue转换器,这样您可以传入Width和preentage,以便计

我想显示一个基于绑定数据源的动态宽度为
矩形
。我最初考虑使用
转换器
,但无法绑定到转换器参数以获得读取动态宽度

我最近的尝试是将父列绑定到UtilPct属性,该属性是我的BrokerCredit对象中的十进制。我认为这是使用十进制值作为绝对值,而不是百分比显示

我该怎么做呢?我希望我的
矩形
或父列根据UtilPct中的百分比占据总列宽的百分比。我还是WPF的新手,所以我非常感谢您的帮助!提前谢谢

XAML:


您可以使用
IMultiValue
转换器,这样您可以传入
Width
preentage
,以便计算列的宽度

例如:

转换器:

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:



不错!我甚至不知道多重绑定!谢谢@sa_ddam213@ss_ddam213-看起来我不能多次设置宽度,所以我尝试使用columndefinition的宽度-但它没有传入实际的宽度值。
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();
    }
}
<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>