WPF线性填充

时间:2010-04-28 21:41:14

标签: c# .net wpf

我找到了一些在WPF矩形控件中创建渐变填充的示例代码:

<Rectangle Height="{Binding ElementName=txtName}" Width="{Binding ElementName=txtName}">
                            <Rectangle.Fill>
                                <LinearGradientBrush>
                                    <GradientStop Color="Silver" Offset="0.0" />
                                    <GradientStop Color="Black" Offset="0.5" />
                                    <GradientStop Color="white" Offset="1.0" />
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle> 

我有一些代码显示了ListBox的集合,其中包含MyObject的详细信息:

<UserControl.Resources>
        <DataTemplate x:Key="CustomerTemplate">
            <Border BorderThickness="2" BorderBrush="Silver" CornerRadius="5" Padding="1" Height="50">
                <Grid x:Name="thisGrid">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <StackPanel Orientation="Horizontal" >
                                <Image Source="C:\MyImage.jpg" Height="50" Width="100" ></Image>
                    </StackPanel>
                    <Border Grid.Column="1" Margin="0" Padding="0">
                            <StackPanel Orientation="Vertical">
                            <TextBlock Name="txtName" Text="{Binding Name}" Background="Silver" Foreground="Black" FontSize="16" FontWeight="Bold" Height="25"/>
                        </StackPanel>
                    </Border>

                </Grid>
            </Border>
        </DataTemplate>
</UserControl.Resources>
    <ListBox ItemsSource="{Binding}" ItemTemplate="{StaticResource CustomerTemplate}" 
                 Name="grdList" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >

    </ListBox>

我想在每个ListBox中应用与第一个示例相同的填充效果。我无法弄清楚如何做到这一点。有人可以帮忙吗?

由于

2 个答案:

答案 0 :(得分:0)

您是否看过使用ListBox的ItemContainerStyle属性设置项容器的背景填充?

答案 1 :(得分:0)

由于你可以改变ListBox的ControlTemplate,就像这里的例子http://msdn.microsoft.com/en-us/library/ms754242(VS.85).aspx一样,你可以写这样的东西

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
  <Style x:Key="{x:Type ListBox}" TargetType="ListBox">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBox">
        <Border 
          Name="Border" 
          BorderThickness="1"
          CornerRadius="20" Style="{DynamicResource DynamicGridBrush}">         
          <ScrollViewer Margin="0" Focusable="false">
            <StackPanel Margin="2" IsItemsHost="True" />
          </ScrollViewer>
        </Border>        
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
<Style TargetType="Border" x:Key="DynamicGridBrush">
    <Setter Property="Background">
      <Setter.Value>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
          <GradientStop Offset="0" Color="LightBlue" />
          <GradientStop Offset="0.65" Color="LightGreen" />
          <GradientStop Offset="1" Color="White" />
        </LinearGradientBrush>
      </Setter.Value>      
    </Setter>
  </Style></Page.Resources>
  <Grid>  
    <ListBox>      
      <TextBlock>aaa</TextBlock>
      <TextBlock>bbb</TextBlock>
      <TextBlock>ccc</TextBlock>
    </ListBox>
  </Grid>
</Page>

如果我理解了您的问题,并且您希望将渐变背景应用于整个列表框。