WPF - 是否可以将ListBox背景与滚动条一起滚动?

时间:2017-02-02 04:28:31

标签: c# wpf

我有ListBox,我用平铺ImageBrush映射背景。当我在ListBox中有很多项目并向下滚动时,背景会保持在同一位置。

是否可以将背景与滚动条一起滚动?如果是这样,怎么样?

<ListBox ItemsSource="{Binding ItemsSource}">
    <ListBox.Background>
       <ImageBrush ImageSource="pack://application:,,,/NS;Assets/background.png" TileMode="Tile" ViewPortUnits="Absolute" Viewport="0,0,400,300"/>
    </ListBox.Background>
</ListBox>

请注意,背景大于ListBoxItem,因此我无法将ImageBrush背景映射到ListBoxItem

1 个答案:

答案 0 :(得分:2)

有一些更优雅的方法可以做到这一点,但一个简单的替代方法是做如下:

<ScrollViewer>
    <Grid>
        <Image Source="MyBackground.png" Stretch="None" Height="{Binding ActualHeight, ElementName=ItemsContainer}" VerticalAlignment="Top" />
        <ListBox x:Name="ItemsContainer" ItemsSource="{Binding ItemsSource}" Background="Transparent" VerticalAlignment="Top" />
    </Grid>
</ScrollViewer>

@edit 或平铺:

<ScrollViewer>
    <Grid>
        <Grid VerticalAlignment="Top" Height="{Binding ActualHeight, ElementName=ItemsContainer}">
            <Grid.Background>
                <ImageBrush ImageSource="MyBackground.png" TileMode="Tile" ViewportUnits="[...]" Viewport="[...]" />
            </Grid.Background>
        </Grid>
        <ListBox x:Name="ItemsContainer" ItemsSource="{Binding ItemsSource}" Background="Transparent" VerticalAlignment="Top" />
    </Grid>
</ScrollViewer>

结果将是:

Output