Рисунок WPF, который простирается, не расширяя Перо

См. 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 

, Если Вы чувствуете, что я не понимаю Вашего (вполне возможного) вопроса, попытайтесь добавить больше объяснения / контекст к описанию проблемы, и я попробую еще раз.

В ответ на Ваше редактирование: Неизменные слоты являются совершенно другой ситуацией...* улыбаются *, я надеюсь что пример выше помогшего.

6
задан Shog9 23 September 2009 в 21:47
поделиться

2 ответа

Внутри строки вы можете привязать ширину (или высоту, в зависимости от того, как вы рисуете линию) с шириной родительский контейнер для достижения того, что вы хотите.

    <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>
4
ответ дан 10 December 2019 в 00:41
поделиться

Насколько мне известно, ничего не известно. Но если вы не делаете что-то действительно экстравагантное, на самом деле не составит большого труда переопределить 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));
    }
}

Результат:

enter image description here

1
ответ дан 10 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: