我想知道如何更改和调整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>
答案 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;编辑副本 这将生成页面资源中当前使用的模板的副本