2

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

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

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

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

<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>

有什么想法吗?

4

2 回答 2

2

What is happening in your data template:

The background of the grid is being set to the color you need. However on top of this Grid, your Canvas is getting painted. Hence the linear gradient background is invisible.

How to correct this?

  1. Set Canvas.Background={Binding}
  2. For which ever control within the canvas that you wish to inherit the Grid.Background to, set that control's Background={Binding}

Sample Code:

</Grid.ColumnDefinitions>-->

                    <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>

Hope this helps!

于 2010-06-02T15:01:08.993 回答
0

What you are doing is correct its doesn't sets the background of your listbox, it sets the background of your listboxitem only. I think you couldn't figure it out.

To figure it out just give the margin to u r grid 5 and then see.What you are doing is correct its doesn't sets the background of your listbox, it sets the background of your listboxitem only. I think you couldn't figure it out.

To figure it out just give the margin to u r grid 5 and then see.

于 2010-06-02T10:15:31.040 回答