2

ListViewをにバインドしましたObservableCollection<Foo>。ListViewItemを選択すると、コンテナ内のSelectedItem(Fooメンバー)の詳細が表示されます。正常に動作します。

ここで必要なのは、SelectedItemのすぐ隣に詳細を表示することです。つまり、4番目のListViewItemを選択すると、コンテナのTopはListViewItemのTopと同じになります。リストをスクロールしているときでも問題が発生する場合は、どのように位置を同期しますか。

PS:スクロールバーは非表示です

この質問はまだ解決されていません。誰か助けてもらえますか?

4

1 に答える 1

1

元の回答

詳細は別のコンテナに入れる必要がありますか?あなたの例を誤解しているかもしれませんが、リストアイテムのアイテムテンプレートに詳細セクションを追加し、IsSelectedフラグに基づいて非表示/表示することで、目的を達成できると思います。

<ListView ItemsSource="{Binding}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <DockPanel>
                    <ContentControl DockPanel.Dock="Right" Name="DetailsControl" Content="{Binding}" ContentTemplate="{StaticResource DetailsTemplate}" />
                    <TextBlock Text="{Binding}" />
                </DockPanel>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" Value="False">
                        <Setter TargetName="DetailsControl" Property="Visibility" Value="Hidden" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

この動作を正確に実行していなくても、例のContentControlを別のもの(ポップアップなど)に置き換えることで、必要なものに近づけることができると思います。


コメントに応じて編集する

以下の例では、選択したアイテムに対してのみ表示されるPopupの右側にを配置します。ListView

<ListView ItemsSource="{Binding}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <DockPanel>
                <TextBlock Text="{Binding}" />

                <Popup Placement="Right"
                        PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}"
                        IsOpen="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}">

                    <Border Background="Black" Padding="3">
                        <TextBlock Text="{Binding}" />
                    </Border>
                </Popup>

            </DockPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

これは、Placement属性を使用してPopup、がターゲット要素の右側に表示されるように指定し、PlacementTargetプロパティをタイプの最初の祖先ListViewItem(つまり親コンテナー)にバインドします。

これにより、次の例のような外観になります。

実例

于 2010-06-24T15:41:37.590 に答える