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の通常のパンではありません。意味がありませんね。

それらのいずれかを削除してください。

あなたの質問に答えるには、ListBoxのBackgroundを聞くようにScrollViewerに指示する必要があります。

これを見てください:

<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}" /> 

ListBox と同じ背景を持つように Grid に指示する方法を見てみましょう。

于 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 に答える