1

我有一个问题,我无法设置 ListBox-Control 的背景颜色。我创建了一个 ItemsControl 模板和 DataTemplates:

 <Style TargetType="ItemsControl" x:Key="LogViewerStyle">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate>
        <Grid>
          <ScrollViewer CanContentScroll="True">
            <ItemsPresenter SnapsToDevicePixels="True" />
          </ScrollViewer>
        </Grid>
      </ControlTemplate>
    </Setter.Value>      
  </Setter>   

 <DataTemplate DataType="{x:Type local:LogEntry}">
  <Grid IsSharedSizeScope="True">
    <Grid.ColumnDefinitions>
      <ColumnDefinition SharedSizeGroup="Index" Width="Auto"/>
      <ColumnDefinition SharedSizeGroup="Date" Width="Auto"/>
      <ColumnDefinition/>
    </Grid.ColumnDefinitions>

    <TextBlock Text="{Binding Index}" Grid.Column="0" FontWeight="Normal" Margin="2,0,2,0" Foreground="{Binding Path=LineNumbersColor, ElementName=LogViewerProperty}" Cursor="RightArrow.cur" TextAlignment="Right" />
    <TextBlock Text="{Binding DateTime}" Grid.Column="1" FontWeight="Bold" Margin="0,0,5,0" />
    <TextBlock Text="{Binding Message}" Grid.Column="2" TextWrapping="{Binding Path=WordWrapping, ElementName=LogViewerProperty, Converter={StaticResource BoolToTextWrap}}" />

  </Grid>
</DataTemplate>

当我尝试给我的 ListBox 一个 BackgroundColor 时,没有任何反应:

<ListBox ItemsSource="{Binding}" x:Name="LogViewer" Background="Cornsilk" Style="{StaticResource LogViewerStyle}">
  <ItemsControl.Template>
    <ControlTemplate>
      <ScrollViewer CanContentScroll="True" Padding="{TemplateBinding Padding}" HorizontalScrollBarVisibility="{Binding Path=WordWrapping, ElementName=LogViewerProperty, Converter={StaticResource BoolToScrollbarVisibility}}" VerticalScrollBarVisibility="{Binding Path=VerticalScrollbarVisible, ElementName=LogViewerProperty}">
        <ItemsPresenter/>
      </ScrollViewer>
    </ControlTemplate>
  </ItemsControl.Template>
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <VirtualizingStackPanel IsItemsHost="True">
      </VirtualizingStackPanel>
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ListBox>

目前我不知道为什么。任何人都可以给我一个提示吗?谢谢!

4

2 回答 2

2

您使用键 LogViewerStyle 将样式应用于 ListBox,该键还定义了一个模板,但随后您为 ListBox 隐式创建了另一个模板。

为什么?那不是 wpf 通常的面包。它没有意义,是吗?

请删除其中之一。

虽然要回答您的问题,但您必须告诉您的 ScrollViewer 收听 ListBox 的背景。

看看这个:

<Style TargetType="ListBox" x:Key="MyListBox">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate>
        <Grid Background="{TemplateBinding Background}">
          <ScrollViewer CanContentScroll="True">
            <ItemsPresenter SnapsToDevicePixels="True" />
          </ScrollViewer>
        </Grid>
      </ControlTemplate>
    </Setter.Value>      
  </Setter> 

然后只需在 ListBox 上设置样式。

<ListBox Style="{StaticResource MyListBox}" /> 

看看它是如何告诉 Grid 使其背景与 ListBox 相同的。

于 2013-11-07T08:08:55.513 回答
0

设置 Background="{TemplateBinding Background}" 为我应用背景

<ListBox ItemsSource="{Binding}" Width="100" x:Name="LogViewer" Background="Red" Style="{StaticResource LogViewerStyle}">
                    <ItemsControl.Template>
                        <ControlTemplate>
                            <ScrollViewer CanContentScroll="True" Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" HorizontalScrollBarVisibility="{Binding Path=WordWrapping, ElementName=LogViewerProperty, Converter={StaticResource BoolToScrollbarVisibility}}" VerticalScrollBarVisibility="{Binding Path=VerticalScrollbarVisible, ElementName=LogViewerProperty}">
                                <ItemsPresenter/>
                            </ScrollViewer>
                        </ControlTemplate>
                    </ItemsControl.Template>
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel IsItemsHost="True">
                            </VirtualizingStackPanel>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                </ListBox>
于 2013-11-07T08:18:24.483 回答