LinearGradientBrush颜色绑定(简单条形图ItemsControl)

时间:2012-04-30 11:11:32

标签: c# wpf itemscontrol lineargradientbrush

修改 我有十六进制值(字符串),我转换为一个画笔因此它没有采取我的颜色以下成功地取得我的颜色:

(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%)并且缩放再次无效。


我有以下带有DateTemplate的ItemsControl,它代表一个简单的条形图:

<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之间的List,因此它们会被缩放)。 有一个矩形我被卡住了,无法根据返回的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基本上返回一个包含十六进制值的列表,以获取这些颜色。

Rectangle


如何使用上图中显示的颜色填充LinearGradientBrush(包含颜色十六进制值的数组)?颜色的顺序保持不变。

或者,如果这不可能,我怎么实际用矩形拉掉它? 如果有一个矩形的其他解决方案我可以再次实现。

最诚挚的问候PeterP。

1 个答案:

答案 0 :(得分:1)

彼得,

在矩形中,您使用数据的Fill属性绑定到矩形的Fill属性。它们都是Brush(或派生类型)

类型

如果是渐变停止,则需要Color对象而不是画笔,因此您可以创建另一个Color类型的数据属性。