Измените элемент управления табличкой данных (заливка треугольника) из codebehind (список) - PullRequest
0 голосов
/ 26 марта 2012

В настоящее время я сделал гистограмму из списка из этого примера: http://weblogs.thinktecture.com/cnagel/2011/06/wpf-listbox-as-bar-chart.html

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

РЕДАКТИРОВАТЬ: Похоже, что ItemsControl больше не получает никакого контента, и моя диаграмма невидима.

XAML:

<ObjectDataProvider x:Key="odpLbGrafiek" ObjectType="{x:Type myClasses:GrafiekBar}" MethodName="GetDataGrafiek"/>
    <ObjectDataProvider x:Key="odpLbGrafiekColors" ObjectType="{x:Type myClasses:GrafiekBar}" MethodName="Fill"/>


<DataTemplate x:Key="GrafiekItemTemplate">
        <Border Width="Auto" Height="Auto">
            <Grid>
                <Rectangle x:Name="recGrafiek" Fill="{Binding Source={StaticResource odpLbGrafiekColors}}" StrokeThickness="0"  
                    Height="45" Width="{Binding}" Margin="13.2" 
                    HorizontalAlignment="Right" VerticalAlignment="Bottom">
                    <Rectangle.LayoutTransform>
                        <ScaleTransform ScaleX="20" />
                    </Rectangle.LayoutTransform>
                </Rectangle>
            </Grid>
        </Border>
    </DataTemplate>


 <ItemsControl x:Name="icGrafiek"  
                 Margin="0" 
                 ItemsSource="{Binding Source={StaticResource odpLbGrafiek}}"
                 ItemTemplate="{DynamicResource GrafiekItemTemplate}" 
                 Grid.RowSpan="5" 
                 Grid.Column="1" Background="{x:Null}" HorizontalAlignment="Left" RenderTransformOrigin="0.5,0.5"
                 >
            <ItemsControl.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform Angle="180"/>
                    <TranslateTransform/>
                </TransformGroup>
            </ItemsControl.RenderTransform>
        </ItemsControl>

С уважением.

1 Ответ

1 голос
/ 26 марта 2012

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

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

public class Bar : INotifyPropertyChanged
{
    public double Value { get; set; } // Implement interface in those properties for binding
    public Brush Fill { get; set; }
}

( Реализация INPC)

<!-- in the template -->
<Rectangle Width="{Binding Value}" Fill="{Binding Fill}" .../>
var bar = (Bar)lbGrafiek.Items.CurrentItem;
bar.Fill = Brushes.Red;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...