2013-12-12 49 views
0

我想知道如何更改和調整ListBox的背景,而不是ListBoxItem的背景。我希望背景爲不透明度爲.5的PhoneChromeBrush。 ListBox實際上是疊加在一張圖片上的,所以我試圖完成的效果是ListBox覆蓋圖片的位置,我希望用戶仍然能夠通過ListBox看到該項目,但是會產生色彩效果,而ListBox中的項目是100%不透明的(不透明度= 1.0)。我不知道如何以這種方式更改列表框的背景,同時保持項目完全可見和可見。如何調整列表框的背景

編輯

<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> 

回答

1

如果你的目標是有堅實的背景ListBoxItems,但列表框本身半透明,嘗試設置ListBox的背景以這種方式。兒童控制不會繼承不透明。

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

這實際上使ListBox中的一切不透明以及資源產生當前使用的模板的副本。 – Matthew

+0

你的意思是什麼應該是半透明的是一個ListBoxItem的以外的地區,但列表框裏面?我理解你的問題,因爲整個控制應該是50%透明的。 – siger

+0

嗯,id像項目保持100%可見,但後面的項目,我可以通過列表框看到,所以我想讓列表框的背景爲灰色50%透明,所以它看起來像在哪裏列表框覆蓋它是淡色 – Matthew

1

如果你想要手機的background顏色(light/dark)不是accent色(青色,紅色,諾基亞藍色,黃色BLA BLA)其簡單的發現。你需要把這些屬性爲ListBox標籤在你XAML -

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

這將手機的背景色設置爲您listbox,無論是

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

這將返回手機的當前口音顏色 -

如果你希望你的listbox的背景是手機的口音顏色,可以通過代碼得到它。現在你想要不透明度爲0.5。要做到這一點可以做到,

AccentColor.A = (byte) 127; 

A阿爾法/不透明度和範圍從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,我們爲Brush(列表框的背景)分配的顏色!這就是爲什麼當您設置列表框的背景,強調色像{StaticResource PhoneAccentColor}它會崩潰的應用程序。直到現在我不知道如何通過xaml代碼設置重音顏色。對不起。希望這可以幫助。

+0

謝謝,是的,我注意到了上面描述的相同問題。我目前遇到的問題是,在設置背景不透明度時,ListBox中的項目也變得不透明。我真的只希望列表框的背景是不透明的筆刷,而項目應該是正常的(A = 255)。我不知道如何在XAML中設置它,因爲當設置背景不透明時,ListBoxItems也變得不透明。 – Matthew

+0

在你的情況下,你說的是「圖像」哪些列表項是正常的?我的意思是你在談論哪個堆棧面板(在你的xaml中)?爲了使項目正常,將屬性**'Opacity =「1」**放入您想要的** StackPanel **標記中。如有任何疑問,請告知我。謝謝。 – thegiga

1

如果你想獲得您所使用的列表框的模板,有一個非常簡單的方法來做到這一點 找到您要的模板設計者 有權在列表框單擊菜單跳轉列表框EditTemplate>編輯副本 這將在頁面