如何调整ListBox的背景

时间:2013-12-12 03:13:25

标签: windows-phone-7 windows-phone-8

我想知道如何更改和调整ListBox的背景,而不是ListBoxItem的背景。我希望背景为PhoneChromeBrush,不透明度为.5。 ListBox实际上部分地叠加在一张图片上,所以我想要完成的效果是ListBox覆盖图像的位置,我希望用户仍然能够通过ListBox看到该项目,但具有有色效果,而ListBox中的项目是100%不透明(不透明度= 1.0)。我不确定如何以这种方式更改ListBox的背景,同时保持项目完全可靠。

修改

<Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="105"/>
            <RowDefinition Height="75"/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Row="0" Grid.ColumnSpan="4" Grid.RowSpan="2" Name="ViewportContainer">
            <Image x:Name="Viewport" LayoutUpdated="Viewport_LayoutUpdated" 
                           Source="{Binding}"
                   toolkit:TiltEffect.IsTiltEnabled="True"/>
        </Grid>

        <ListBox Grid.Row="1" Grid.ColumnSpan="4" x:Name="ListBox" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                     toolkit:TiltEffect.IsTiltEnabled="True" SelectionChanged="ListBox_SelectionChanged" 
                         Visibility="Collapsed" 
                 ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" Margin="1,0,0,0">
                        <Image Source="{Binding Thumbnail}" Width="100" Height="100" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

3 个答案:

答案 0 :(得分:1)

如果您的目标是使ListBoxItems具有纯色背景,但ListBox本身是透明的,请尝试以这种方式设置ListBox的背景。儿童控件不会继承不透明度。

<ListBox>
     <ListBox.Background>
        <SolidColorBrush Color="Green" Opacity="0.5"/>
    </ListBox.Background>
    <ListBox.Items>
        <ListBoxItem Background="Red" Margin="10">Item</ListBoxItem>
    </ListBox.Items>
</ListBox>

答案 1 :(得分:1)

如果您想要手机的 background 颜色( light / dark ),请不要<强> accent 颜色(青色,红色,诺基亚蓝,黄色bla bla)很容易找到。您需要将这些属性放入 xaml 中的ListBox标记 -

Background="{StaticResource PhoneBackgroundBrush}" Opacity="0.5"

这会将手机的背景颜色设置为listbox深色光线

如果您希望listbox的背景为手机的重音颜色,则可以通过代码 -

获取
Color AccentColor = (System.Windows.Media.Color)Application.Current.Resources["PhoneAccentColor"];

这将返回Phone的当前重音颜色。现在您希望不透明度为0.5。要做到这一点,你可以做到,

AccentColor.A = (byte) 127;

A适用于 alpha / 不透明度,范围为0到255(字节)。所有 ARGB 值都已分配,只需根据您的要求更改不透明度A)值。

现在您可以将此AccentColor设为Brush。要更改listbox的背景,

myListBox.Background = new SolidColorBrush(AccentColor);

我遇到的问题是,列表框的背景返回 Brush 而不是 Color 所以

当你说 {StaticResource PhoneBackgroundBrush} 时,它会在内部将其视为

myListBox.Background = (System.Windows.Media.Brush)Application.Current.Resources["PhoneBackgroundBrush"];

当您想要将重音颜色设置为时,情况并非如此 背景,因为 {StaticResource PhoneAccentColor} Application.Current.Resources["PhoneAccentColor"] 返回 color ,我们正在为画笔指定颜色(列表框的背景) !这就是为什么当你将列表框的背景设置为像 {StaticResource PhoneAccentColor} 这样的强调颜色时,它会崩溃应用程序。直到现在我不知道如何通过xaml代码添加强调色。对不起。希望这会有所帮助。

答案 2 :(得分:1)

如果您想获得正在使用的列表框的模板,有一种非常简单的方法可以做到这一点 在设计器中找到您想要模板的列表框 右键单击菜单中的ListBox,转到EditTemplate&gt;编辑副本 这将生成页面资源中当前使用的模板的副本