4

ListViewを基本(非GridView)モードで簡単に「暗黙的に」スタイル設定できますが、ListViewをGridViewモードで暗黙的にスタイル設定しようとしても失敗しました。2番目のListViewのStyleとItemContainerStyleを明示的に設定したため、以下が機能します。これらの2つの設定を削除すると、2番目のListViewは、最初の設定のように暗黙的にスタイル設定されません。基本的なListViewにはContentPresenterが必要であり、GridViewListViewにはGridViewRowPresenterが必要なようです。

ここでWPFのレンガの壁にぶつかっていますか?これも可能ですか?そうでない場合は、GridViewモードで表示されるListViewでStyleとItemContainerStyleを明示的に設定する必要があるため、アプリケーションスキンの作成の堅牢性が低下します。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="ListView">
            <Setter Property="Background" Value="Lime"/>
        </Style>
        <Style TargetType="ListViewItem">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Grid>
                      <ContentPresenter x:Name="ContentHost" Margin="{TemplateBinding Padding}"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Grid>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="{x:Static GridView.GridViewStyleKey}"
               TargetType="{x:Type ListView}">
            <Setter Property="Background" Value="Lime"/>
        </Style>
        <Style x:Key="{x:Static GridView.GridViewItemContainerStyleKey}"
               TargetType="{x:Type ListViewItem}">
            <Setter Property="Background" Value="Yellow"/>
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <ListView x:Name="_listView1">
            <system:String>Item 1</system:String>
            <system:String>Item 2</system:String>
            <system:String>Item 3</system:String>
        </ListView>

        <ListView x:Name="_listView2" Grid.Column="1" 
                  Style="{StaticResource {x:Static GridView.GridViewStyleKey}}"
                  ItemContainerStyle="{StaticResource {x:Static GridView.GridViewItemContainerStyleKey}}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Date"/>
                    <GridViewColumn Header="Day of Week" DisplayMemberBinding="{Binding DayOfWeek}" />
                    <GridViewColumn Header="Year" DisplayMemberBinding="{Binding Year}" />
                </GridView>
            </ListView.View>
            <system:DateTime>1/1/2010</system:DateTime>
            <system:DateTime>1/1/2011</system:DateTime>
            <system:DateTime>1/1/2012</system:DateTime>
        </ListView>
    </Grid>
</Window>
4

1 に答える 1