2012-04-30 4 views
3

EDIT: я шестнадцатеричное значение (строка), что я преобразуется в кисть, следовательно, она не приняла мой цвет следующих как берет мои цвета успешно:LinearGradientBrush Цвет Binding (Simple Bar Chart ItemsControl)

(Color)ColorConverter.ConvertFromString(colorArray[0]) 

Остается только проблема масштабирования (с цветами).

Мои цветные полоски кажутся прозрачными (еще раз), но теперь с соответствующим цветом, прикрепленным к каждому бару. Также при запуске моей программы отображаются все 6 баров (но они не должны отображаться, потому что они еще не имеют значения). Код:

<Border Height="30" Margin="15" Grid.RowSpan="6" > 
       <Border.Background> 
        <LinearGradientBrush StartPoint="0.0,0" EndPoint="1.0,0"> 
         <GradientStopCollection> 
          <GradientStop Offset="0.0" Color="{Binding FillBar, UpdateSourceTrigger=PropertyChanged}" /> 

          <GradientStop Offset="{Binding Value, UpdateSourceTrigger=PropertyChanged}" /> 

         </GradientStopCollection> 
        </LinearGradientBrush> 
       </Border.Background> 
      </Border> 

enter image description here

Как именно я избавиться от прозрачного цвета замирания в середине/конце строки?

Когда я пытаюсь добавить один и тот же цвет ко второму смещению, я получаю бары полной длины (100%), и масштабирование снова сбрасывается.


У меня есть следующий ItemsControl с DateTemplate, который представляет собой простую гистограмму:

<ItemsControl x:Name="icGrafiek" 
      Margin="0,0,0,0" 
      ItemsSource="{Binding Source={StaticResource Grafiek}}" 
      ItemTemplate="{DynamicResource GrafiekItemTemplate}" 
      RenderTransformOrigin="1,0.5" Grid.RowSpan="6" Grid.Column="1"/> 

<DataTemplate x:Key="GrafiekItemTemplate"> 
      <Grid> 
      <Border Height="30" Margin="15" Grid.RowSpan="6" > 
       <Border.Background> 

        <LinearGradientBrush StartPoint="0.0,0" EndPoint="1.0,0"> 
         <GradientStopCollection> 
          <GradientStop Offset="0.0" Color="#fff" /> 

          <GradientStop Offset="{Binding Value, UpdateSourceTrigger=PropertyChanged}" 
              Color="{Binding Fill, UpdateSourceTrigger=PropertyChanged}" /> 

          <GradientStop Offset="{Binding Value, UpdateSourceTrigger=PropertyChanged}" 
              Color="{Binding Fill, UpdateSourceTrigger=PropertyChanged}" />               
         </GradientStopCollection> 
        </LinearGradientBrush>     
       </Border.Background> 
      </Border> 
     </Grid> 
    </DataTemplate> 

Проблема на самом деле отображаются цвета моих прутья моего управления диаграммы. получает отображается

Следующая: GradientBrush

Перед GradientBrush я использовать Rectangle вместо того, чтобы создать решетку. Я использовал GradientBrush, чтобы я мог шкала мои бары (BindingЗначение возвращает список со значениями от 1,0 до 0, чтобы они масштабировались). С прямоугольником я застрял и не имел возможности масштабировать мои бары в соответствии с возвращаемыми значениями 1.0 - 0.

Старый код с Rectangle:

<DataTemplate x:Key="GrafiekItemTemplate"> 
      <Grid> 
       <Rectangle StrokeThickness="0" Height="30" 
          Margin="15" 
          HorizontalAlignment="Left" 
          VerticalAlignment="Stretch" 
          Width="{Binding Value, UpdateSourceTrigger=PropertyChanged}" 
          Fill="{Binding Fill, UpdateSourceTrigger=PropertyChanged}"> 
        <Rectangle.LayoutTransform> 
         <ScaleTransform ScaleX="20" /> 
        </Rectangle.LayoutTransform> 
       </Rectangle> 
      </Grid> 
    </DataTemplate> 

Когда я использовал прямоугольник с Заливка Binding мой график выглядел так (как должно быть): FillBinding в основном возвращается список с шестнадцатеричными значениями для получения этих цветов.

Rectangle


Как я завалить LinearGradientBrush с цветами показали на картинке выше (массив, который содержит шестнадцатеричные значения цветов)? Порядок цветов остается прежним.

Или, если это невозможно, как на самом деле вытащить его с помощью прямоугольника? Если есть другое решение с прямоугольником, я могу просто реализовать это снова.

С наилучшими пожеланиями, PeterP.

+0

PeterP, я думаю, что основной причиной большинства ваших проблем является отсутствие конвертеров Binding. Вам не нужно напрямую привязывать значение, но для преобразования этого значения в соответствии с потребностями вашей презентации. Посмотрите: http://www.switchonthecode.com/tutorials/wpf-tutorial-binding-converters –

+0

Привет, Хайме. Может быть, но не совсем уверен, как это решить с помощью преобразователей. – PeterP

ответ

1

Питер,

В прямоугольнике вы использовали данные досыта свойство привязан к собственности Заливка прямоугольника. Оба они имеют тип Brush (или производный тип)

В случае остановки градиента ожидается объект Color, а не кисть, поэтому вместо этого вы можете создать другое свойство данных типа Color.

+1

Боковой вопрос: почему у вас есть градиентные остановки с одинаковым смещением и цветом? –

+0

Привет, jaime сделал редактирование поверх моего сообщения, окончательно приблизившись к решению, но имея последний вопрос. – PeterP

+1

Извините, просто заметил ужасную опечатку в моем вопросе. Я имел в виду: почему у вас есть два градиента с одинаковым смещением и цветом? –