使用ValueConverter将Line相对于其父ActualHeight和另一个ViewModel属性定位

时间:2013-05-28 19:00:30

标签: xaml data-binding mvvm ivalueconverter element-binding

我的ViewModel中有一个名为RelativeHeight的属性,它是一个从0到1的双精度。

在我的视图中,我有一条水平线,其宽度与其容器相同(通过Element Binding),但我希望它的垂直位置相对于容器的大小。

例如,如果RelativeHeight0.3,而容器的ActualHeight200,则Line.X1Line.X2将为{{ 1}}每个。

以下代码是我得到的,但不知道如何使用(或者即使我应该首先使用)一些60因为通常我无法从视图中获取属性IValueConverter方法......

Convert

1 个答案:

答案 0 :(得分:0)

IMultiValueConverter得到它,就像这样(葡萄牙语中的变量名):

... (resource dictionary)

<views:ConversorNível x:Key="conversorNivel"/>

....

<Line x:Name="line" Stroke="Red" Opacity="0.6" Grid.ColumnSpan="5" StrokeThickness="2"
      X1="0" X2="{Binding ActualWidth, ElementName=Gráficos}"
      Y2="{Binding Y1, ElementName=line}" >
    <Line.Y1>
        <MultiBinding Converter="{StaticResource conversorNivel}">
            <Binding Path="NívelSelecionado" />
            <Binding ElementName="Gráficos" Path="ActualHeight" />
        </MultiBinding>
    </Line.Y1>
</Line>

和代码隐藏:

public class ConversorNível : IMultiValueConverter {
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (double)values[0] * (double)values[1];
    }

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