См. Scala примером , страница 57 + для полного обсуждения этого.
, Если я понимаю Ваш комментарий правильно, необходимо перечитать проход, запускающийся внизу страницы 56 (в основном, что я думаю, что Вы просите, не безопасно с точки зрения типов без проверок времени выполнения, которые не делает scala, таким образом, Вам не повезло). Перевод их примера для использования конструкции:
val x = new Slot[String]("test") // Make a slot
val y: Slot[Any] = x // Ok, 'cause String is a subtype of Any
y.set(new Rational(1, 2)) // Works, but now x.get() will blow up
, Если Вы чувствуете, что я не понимаю Вашего (вполне возможного) вопроса, попытайтесь добавить больше объяснения / контекст к описанию проблемы, и я попробую еще раз.
В ответ на Ваше редактирование: Неизменные слоты являются совершенно другой ситуацией...* улыбаются *, я надеюсь что пример выше помогшего.
Внутри строки вы можете привязать ширину (или высоту, в зависимости от того, как вы рисуете линию) с шириной родительский контейнер для достижения того, что вы хотите.
<Grid x:Name="Grid" Margin="10">
<Border BorderBrush="Black" BorderThickness="1" />
<Line X1="0" X2="{Binding ElementName=Grid, Path=ActualWidth}" Y1="1" Y2="1" Stroke="Red" Margin="0,10,0,0" />
<Line X1="0" X2="{Binding ElementName=Grid, Path=ActualWidth}" Y1="1" Y2="1" Stroke="Green" Margin="0,30,0,0" />
<Line X1="0" X2="{Binding ElementName=Grid, Path=ActualWidth}" Y1="1" Y2="1" Stroke="Blue" Margin="0,50,0,0" />
</Grid>
Изменить: Вот другой способ без использования привязки
<Border BorderBrush="Black" BorderThickness="1" >
<Path Stroke="Red" StrokeThickness="1" Data="M0,0 1,0Z" Stretch="Fill" />
</Border>
Насколько мне известно, ничего не известно. Но если вы не делаете что-то действительно экстравагантное, на самом деле не составит большого труда переопределить OnRender
и нарисовать его самостоятельно:
public class CustomBorder : Border
{
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
dc.DrawLine(new Pen(BorderBrush, BorderThickness.Top), new Point(0, 0), new Point(ActualWidth, ActualHeight));
}
}
Результат: