如何设置列表框背景颜色,当它具有自定义datatemplate和ItemsPanelTemplate时

时间:2016-02-10 10:28:39

标签: wpf xaml

我有一个带有DataTemplate和UniformGrid的列表框作为ItemspanelTemplate,它显示它应该除了一件事,它忽略了我设置的背景颜色。所以我希望我的Listbox透明。这是我的简单例子

<Window xmlns:local="clr-namespace:ListboxBackground" Background="Red">
<local:MyListbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</Window>

<UserControl x:Class="ListboxBackground.MyListbox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
    <DataTemplate x:Key="MyDataTemplate">
        <Border Background="Green" Margin="2"/>
    </DataTemplate>
</UserControl.Resources>
<ListBox x:Name="Listbox" ItemTemplate="{StaticResource MyDataTemplate}" IsEnabled="False" Background="Transparent">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="4" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="VerticalContentAlignment" Value="Stretch" />
            <Setter Property="Padding" Value="0" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
</UserControl>

背后的代码

public partial class MyListbox : UserControl
{
    private List<int> foo = new List<int>();
    public MyListbox()
    {
        InitializeComponent();

        for (int i = 0; i < 52; i++)
        {
            foo.Add(i);
        }
        Listbox.ItemsSource = foo;
    }
}

无论我将背景颜色设置为透明在哪里都忽略它。虽然我希望在这种情况下看到红色背景颜色,因为这是主窗口设置的颜色。

任何想法为什么?我查看了各种各样的例子(在样式等设置,但没有一个会起作用,背景总是保持白色)

谢谢

2 个答案:

答案 0 :(得分:1)

根据我的评论。您可以更改IsEnabled = trueListbox的{​​{1}}或添加(UserControl应始终透明)。

Listbox

答案 1 :(得分:0)

我无法重现你的行为。一切正常。我编辑过的内容:

  • 我刚在网格背景中添加了一张图片:
  • TextBlock&#34; MyDataTemplate&#34; {/ li> DataTemplate添加了值
  • 已删除IsEnabled属性

让我们看一下完整的代码:

<Window.Resources>
    <DataTemplate x:Key="MyDataTemplate">
        <Border Background="Green" Margin="2">
            <TextBlock Text="1"/>
        </Border>
    </DataTemplate>
</Window.Resources>
<Grid >
    <Grid.Background>
        <ImageBrush ImageSource="disco-lightball.jpg"/>
    </Grid.Background>
    <StackPanel>
        <ListBox x:Name="Listbox" ItemTemplate="{StaticResource MyDataTemplate}"  Background="Transparent">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Columns="4" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                    <Setter Property="VerticalContentAlignment" Value="Stretch" />
                    <Setter Property="Padding" Value="0" />
                </Style>
            </ListBox.ItemContainerStyle>
        </ListBox>
    </StackPanel>
</Grid>

我们可以看到:

enter image description here