2013-02-11 1 views
3

Я использую WPF. Есть ли способ, чтобы получить такой эффект, как этот:Эффект линии в WPF

enter image description here

LineEffect

Так в основном градиент с несколькими линиями сверху. Числовые линии должны увеличиваться в зависимости от ширины/высоты элемента.

+0

Пожалуйста, отметьте ответ, если это то, что вы искали. Благодаря! –

ответ

4

Я хотел бы использовать два слоя, первый прямоугольник является фоном, а второй является то, что накладываются друг на друга

<!-- Background gradient --> 
<Rectangle Width="200" Height="100"> 
    <Rectangle.Fill> 
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
      <GradientStop Color="#FF5B5B5B" Offset="0.008"/> 
      <GradientStop Color="#FFA6A6A6" Offset="1"/> 
     </LinearGradientBrush> 
    </Rectangle.Fill>  
</Rectangle> 

<!-- Lines layer --> 
<Rectangle Width="200" Height="100"> 
    <Rectangle.Fill> 
     <VisualBrush 
       TileMode="Tile" 
       Viewport="0,0,7,7" 
       ViewportUnits="Absolute" 
       Viewbox="0,0,7,7" 
       ViewboxUnits="Absolute" > 
      <VisualBrush.Visual> 
       <Line X1="7" X2="0" Y1="0" Y2="7" Stroke="Gray" /> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Rectangle.Fill> 
</Rectangle> 

В ответ на @Shlomo

Вы могли бы в конечном итоге изменить кисть, чтобы содержать две строки вместо одного, чтобы избавиться от интервала при увеличении. Решение будет выглядеть примерно так:

<VisualBrush.Visual> 
    <Grid> 
     <Line X1="10" X2="0" Y1="0" Y2="10" Stroke="Gray" /> 
     <Line X1="4" X2="-1" Y1="-1" Y2="4" Stroke="Gray" /> 
    </Grid> 
</VisualBrush.Visual> 

Таким образом, нам не нужно те уродливым приближен номер.

+1

Спасибо вам обоим @ Aleksandar-Toplek и @Shlomo! Это были именно те ответы, которые я искал. – user18247

0

Вот пример, который должен сработать для вас.

<Rectangle Width="200" Height="100"> 
     <Rectangle.Fill> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> 
       <GradientStop Color="Yellow" Offset="0.0" /> 
       <GradientStop Color="Red" Offset="0.25" /> 
       <GradientStop Color="Blue" Offset="0.75" /> 
       <GradientStop Color="LimeGreen" Offset="1.0" /> 
      </LinearGradientBrush> 
     </Rectangle.Fill> 
    </Rectangle> 
+0

Я не ищу линейного градиента. Меня больше интересует линия над градиентом. – user18247

1

Отработка решения Александра. Он фиксирует недостатки, что линии выглядят как линия колбас, если вы увеличиваете их.

<!-- Background gradient --> 
<Rectangle Width="200" Height="100"> 
    <Rectangle.Fill> 
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
      <GradientStop Color="#FF5B5B5B" Offset="0.008"/> 
      <GradientStop Color="#FFA6A6A6" Offset="1"/> 
     </LinearGradientBrush> 
    </Rectangle.Fill>  
</Rectangle> 

<!-- Lines layer --> 
<Rectangle Width="200" Height="100"> 
    <Rectangle.Fill> 
     <VisualBrush 
       TileMode="Tile" 
       Viewport="0,0,10,10" 
       ViewportUnits="Absolute" 
       Viewbox="0,0,10,10" 
       ViewboxUnits="Absolute" > 
      <VisualBrush.Visual> 
       <Grid> 
        <Line Fill="#777" X1="0" X2="10" Y1="10" Y2="0" Stroke="Gray" StrokeThickness="1" /> 
        <Line Fill="#777" X1="0" X2="0.35355339059327376220042218105242" Y1="0" Y2="0.35355339059327376220042218105242" Stroke="Gray" /> 
        <Line Fill="#777" X1="9.6464466094067262377995778189476" X2="10" Y1="9.6464466094067262377995778189476" Y2="10" Stroke="Gray" /> 
       </Grid> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Rectangle.Fill> 
</Rectangle> 
+0

Теперь я удалил эти уродливые аппроксимированные числа, проверьте мой ответ ... Как вы добрались до этих чисел в любом случае, грубой силой? : D –

+1

Правые равнобедренные треугольники создаются углом диагональной линии и квадратным окном просмотра. Поскольку толщина штриха равна 1, обе стороны равны .5 каждый, поэтому длина должна быть корневой (.25 + .25)/2 => .35355 ... Другое число составляет 10 минус. – Shlomo

+0

Излишне говорить, что ваш ответ намного более изящный. – Shlomo

 Смежные вопросы

  • Нет связанных вопросов^_^