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



我有一个属性在我的ViewModel称为RelativeHeight,这是一个双范围从0到1。

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

例如,如果RelativeHeight0.3,容器的ActualHeight200,则Line.X1Line.X2分别为60

下面的代码是我得到的,但不知道如何使用(或者即使我应该在第一个地方使用)一些IValueConverter,因为通常我不能从视图中获得属性时调用Convert方法…

<Line Stroke="Red" Opacity="0.5" StrokeThickness="5"
      X1="0" X2="{Binding ActualWidth, ElementName=Graphs}"
      Y1="{Binding RelativeHeight, Converter=MaybeSomeConversion}"
      Y2="{Binding RelativeHeight, Converter=MaybeSomeConversion}" />

使用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>

和codebehind:

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();
    }
}

最新更新