2012-09-04 16 views
14

Próbuję zmienić kolor tła na "ListBox" na stronie WinRT (XAML). Kiedy używam „czerwony” właściwość, zmienia tło jak chcę go, gdy kontrola nie ma ostrości. Kiedy się skupi, zmienia się na biały i nie mogę wymyślić, jak to zmienić.ListBox Kolor tła (XAML/WinRT/Metro)

Moje pytanie, jak wymusić na tle ListBox, aby zawsze był szary, czy został wybrany/ma fokus, czy nie?

XAML # 1:

<ListBox x:Name="ListBoxMenu" Background="LightGray" Grid.Row="0" Grid.Column="0" Margin="0,0,0,0"> 
     <ListBoxItem>Menu Item 1</ListBoxItem> 
     <ListBoxItem>Menu Item 2</ListBoxItem> 
     <ListBoxItem>Menu Item 3</ListBoxItem> 
    </ListBox> 

XAML # 2 (z każdej pozycji ustawić również):

<ListBox x:Name="ListBoxMenu" Background="LightGray" Grid.Row="0" Grid.Column="0" Height="124" VerticalAlignment="Top"> 
     <ListBoxItem Background="LightGray">Menu Item 1</ListBoxItem> 
     <ListBoxItem Background="LightGray">Menu Item 2</ListBoxItem> 
     <ListBoxItem Background="LightGray">Menu Item 3</ListBoxItem> 
    </ListBox> 

ListBox with Gray background when it doesn't have the focus

ListBox, resetting the background to white when it gets focus

rozwiązanie jako tymczasowe, ustawić ListBox może być tylko zakodowanym h osiem, następnie użył granicy na tej kolumnie, aby wypełnić resztę przestrzeni LightGray. Naprawdę chciałbym zawsze ustawić kolor tła w ListBox, czy to możliwe?

+0

Czy możesz podać fragment kodu dla znalezionego rozwiązania? Mam również ten sam problem, ale nie mogłem go naprawić. – SachiraChin

+0

W zależności od preferencji, jeśli istnieje tylko jeden lub dwa zdarzenia, które powodują zmianę powrót ziemi, można po prostu dodać ListBoxMenu.Background = Colors.Transparent do obsługi zdarzeń. – Hong

Odpowiedz

5

Zastosowanie Mieszanka Visual Studio 2012 i edytować ListBox ItemTemplate czy to szablon, który będzie tworzyć wydruk w XAML, w którym można edytować jego właściwości.

+0

Dzięki, pozwól mi pójść spróbować. –

+0

Co to jest Visual Blender? Czy możesz podać link? –

+1

Myślę, że miał na myśli Blend for Visual Studio. Udało mi się kliknąć prawym przyciskiem myszy na ListBox i użyć stylu edycji, aby utworzyć wydruk, który udało mi się edytować. Pominąłem Blend, ponieważ mogłem zmienić szablon, który tam dostarczyłem. –

3

wpadłem na ten sam problem i użyłem pomocy Visual Studio mieszanki. Mam nadzieję że to pomoże.

dodać styl do ListBoxMenu następująco:

<ListBox x:Name="ListBoxMenu" Style="{StaticResource ListBoxStyle1} Background="LightGray" Grid.Row="0" Grid.Column="0" Height="124" VerticalAlignment="Top"> <ListBoxItem Background="LightGray">Menu Item 1</ListBoxItem> <ListBoxItem Background="LightGray">Menu Item 2</ListBoxItem> <ListBoxItem Background="LightGray">Menu Item 3</ListBoxItem> </ListBox>

Następnie określ stylizacji następująco:

<Style x:Key="ListBoxStyle1" TargetType="ListBox"> 
     <Setter Property="Foreground" Value="{StaticResource ListBoxForegroundThemeBrush}"/> 
     <Setter Property="Background" Value="{StaticResource ListBoxBackgroundThemeBrush}"/> 
     <Setter Property="BorderBrush" Value="{StaticResource ListBoxBorderThemeBrush}"/> 
     <Setter Property="BorderThickness" Value="{StaticResource ListBoxBorderThemeThickness}"/> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled"/> 
     <Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="True"/> 
     <Setter Property="ScrollViewer.VerticalScrollMode" Value="Enabled"/> 
     <Setter Property="ScrollViewer.IsVerticalRailEnabled" Value="True"/> 
     <Setter Property="ScrollViewer.ZoomMode" Value="Disabled"/> 
     <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/> 
     <Setter Property="ScrollViewer.BringIntoViewOnFocusChange" Value="True"/> 
     <Setter Property="IsTabStop" Value="False"/> 
     <Setter Property="TabNavigation" Value="Once"/> 
     <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/> 
     <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/> 
     <Setter Property="ItemsPanel"> 
      <Setter.Value> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel/> 
       </ItemsPanelTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBox"> 
        <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{StaticResource AppBarBackgroundThemeBrush}"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="LayoutRoot"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListBoxDisabledForegroundThemeBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="FocusStates"> 
           <VisualState x:Name="Focused"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ScrollViewer"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
           <VisualState x:Name="Unfocused"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <ScrollViewer x:Name="ScrollViewer"> 
         <ItemsPresenter/> 
        </ScrollViewer> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Powyższa próba zastąpi tle wy listy pojemnik pudełko Black gdy fokus jest ustawiony na ListBox.

2

Jeśli potrzebujesz więcej pomocy na dostosowanie kolorów Items w ListBox, ListView lub GridView, wszystkie działają na tej samej zasadzie, tylko pamiętaj, aby zaktualizować właściwości TargetType, polecam zaglądając do Vito Wpis na blogu DeMercurio: Styling a GridViewItem in WinRT

6

Możesz po prostu umieścić przesłonięcia pędzlem koloru w pliku zasobów XAML, aby zastąpić domyślne kolory szablonu kontrolki ListBox.

<SolidColorBrush x:Key="ListBoxBackgroundThemeBrush" Color="Transparent" /> 
<SolidColorBrush x:Key="ListBoxFocusBackgroundThemeBrush" Color="Transparent" /> 
+0

Nicea rozwiązanie, tak długo, jak chcesz mieć takie same kolory dla wszystkich listboxes. –

+1

Nie sądzę, że to działa już w systemie Windows 8.Tylko w Win 7. – user3595338