Использование ValueConverter для позиционирования Line относительно ее родительского ActualHeight и другого свойства ViewModel
У меня есть свойство в моей ViewModel под названием RelativeHeight
, который является двойным в диапазоне от 0 до 1.
На мой взгляд, у меня есть горизонтальная линия, ширина которой равна его контейнера (через Element Binding
), но я хочу, чтобы он имел вертикальное положение относительно размера контейнера.
Например, если RelativeHeight
является 0.3
и контейнер ActualHeight
является 200
, затем Line.X1
а также Line.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}" />
1 ответ
Понял с 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();
}
}