你能为silverlight中的listboxitem背景设置渐变画笔吗?

时间:2010-06-02 04:30:13

标签: silverlight xaml listbox listboxitem lineargradientbrush

我正在寻找一种方法来将gradientbrush设置为列表框项目的背景。我定义了一个DataTemplate并指定了一个渐变画笔,但它总是显示为列表框背景(即它从不显示为渐变画笔)。

我已经能够设置列表框本身的背景,并且我可以使用“setter”对象将listboxitem的背景设置为标准颜色....但这些都不是我所追求的。

我真的希望每个列表项的背景都是渐变画笔。

以下是我构建的数据模板。

<ListBox Name="MyListBox"  Margin="12,67,12,169">

        <ListBox.ItemTemplate>
        <DataTemplate>
                <Grid Height="51"  VerticalAlignment="Bottom">
                    <Grid.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="#FFC9F4D0"/>
                            <GradientStop Color="#FF2AC12A" Offset="0.333"/>
                            <GradientStop Color="#FF35DE35" Offset="1"/>
                        </LinearGradientBrush>
                    </Grid.Background>
                    <Canvas >
                        <dataInput:Label Width="227" Foreground="Yellow" Canvas.Left="158" Canvas.Top="8" Content="{Binding Place}"/>
                        <dataInput:Label Width="146" Foreground="Yellow" Canvas.Left="8" Canvas.Top="8" Content="{Binding Date}"/>
                        <dataInput:Label Content="{Binding People}" Width="346" FontSize="9.333" Foreground="Black" Canvas.Left="166" Canvas.Top="28"/>
                        <!-- <dataInput:Label Width="45" Content="Accept" Foreground="White" Canvas.Left="8" Canvas.Top="28"/>
                        <dataInput:Label Width="45" Content="Decline" Foreground="White" Canvas.Left="57" Canvas.Top="28"/> -->
                        <dataInput:Label Content="SomeText" Width="101" FontSize="9.333" Foreground="White" Canvas.Left="389" Canvas.Top="10"/>
                        <Image Height="21" Width="21" Canvas.Left="500" Canvas.Top="8" Source="Green Button.png"/>
                    </Canvas>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您的数据模板中发生了什么:

网格的背景设置为您需要的颜色。然而,在这个网格的顶部,你的画布正在绘制。因此,线性渐变背景是不可见的。

如何解决这个问题?

  1. 设置Canvas.Background = {Binding}
  2. 对于您希望继承Grid.Background的画布中的哪个控件,设置该控件的Background = {Binding}
  3. 示例代码:

                                                                                                                                                                                                                                                                                                                                                                                 &LT; /Grid.ColumnDefinitions> - &GT;

                        <Canvas Background="{Binding}">
    
                            <TextBox Width="227" Canvas.Left="158" Canvas.Top="8" Foreground="Yellow" Text="{Binding Name}" Background="{Binding}"/>
                            <TextBox Width="146" Canvas.Left="8" Canvas.Top="8" Foreground="Yellow" Text="{Binding Language}" Background="{Binding}"/>
    
                        </Canvas>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    

    希望这有帮助!

答案 1 :(得分:0)

你正在做的是正确的,它没有设置列表框的背景,它只设置listboxitem的背景。我想你无法理解。

要搞清楚,只需给网格5边距,然后看看。你正在做的是正确的,它没有设置列表框的背景,它只设置listboxitem的背景。我想你无法理解。

要计算出来,只需将余量给予网格5然后再看。