0

私は WinRT を初めて使用するので、これがばかげた質問である場合は申し訳ありません。次の ListView を作成しました。

<ListView x:Name="MyListView1" 
        Grid.Row="1" 
        Margin="120,300,0,0" 
        Width="500" 
        HorizontalAlignment="Left">

    <ListViewItem Background="DodgerBlue">

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="300" />
            </Grid.ColumnDefinitions>

            <TextBlock Text="hardcoded value 1" Grid.Column="0"></TextBlock>
            <TextBlock Text="hardcoded value 2" Grid.Column="1"></TextBlock>

        </Grid>

    </ListViewItem>
</ListView>

これは私が望む外観であり、項目をクリックすると行全体が選択されます。ただし、これを DataTemplate に移動すると、同じようには見えず、行全体をクリックできなくなります。(ターゲット タイプ ListViewItem で ItemContainerStyle を追加し、背景を黄色に設定すると、塗りつぶされてハードコードされた ListItem と同じサイズになりますが、黄色のアウトラインをクリックして選択することしかできません。) これがコードです。 :

<ListView x:Name="MyListView2" 
        ItemTemplate="{StaticResource MyTemplate}" 
        ItemsSource="{Binding MyData}"
        Grid.Row="1" 
        Margin="120,0,0,0" 
        Width="500" 
        HorizontalAlignment="Left">

</ListView>

そして StandardStyles.xaml では:

<DataTemplate x:Key="MyTemplate">

    <ListViewItem Background="DodgerBlue">

        <Grid>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="300" />
            </Grid.ColumnDefinitions>

            <TextBlock Text="{Binding MyDataOne}" Grid.Column="0"></TextBlock>
            <TextBlock Text="{Binding MyDataTwo}" Grid.Column="1"></TextBlock>

        </Grid>

    </ListViewItem>
</DataTemplate>

それらが同じように見えない/機能しない理由がわかりません-バインドするときにまったく同じコードが入力されるべきではありませんか? それを機能させるために何をする必要がありますか?

4

1 に答える 1

2

問題は、データ テンプレートの作成方法です。ListViewItem は、リストに表示する必要があるオブジェクトに追加されるラッパーであるため、listviewitem を含むデータ テンプレートを作成すると、基本的にオブジェクトを 2 回ラップすることになります。必要なのは、データテンプレートから listviewitem 要素を削除することだけです

<DataTemplate x:Key="MyTemplate">

    <Grid Background="DodgerBlue">

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
            <ColumnDefinition Width="300" />
        </Grid.ColumnDefinitions>

        <TextBlock Text="{Binding MyDataOne}" Grid.Column="0"></TextBlock>
        <TextBlock Text="{Binding MyDataTwo}" Grid.Column="1"></TextBlock>

    </Grid></DataTemplate>
于 2013-07-12T11:53:27.883 に答える