2

我的 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}" />
4

1 回答 1

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();
    }
}
于 2013-05-28T19:42:51.720 回答