2

ListViewの選択したアイテムの近くにいくつかのWPF要素を表示したいと思います。選択したListViewItemの座標(画面または相対)を取得するにはどうすればよいですか?

<ListView 
    x:Name="TechSchoolListView"
    ClipToBounds="False"
    Width="Auto" Height="Auto" 
    HorizontalContentAlignment="Stretch" 
    VerticalContentAlignment="Top" 
    ItemTemplate="{DynamicResource TechSchoolDataTemplate}" 
    ItemsSource="{Binding Path=TechSchoolResearchList, Mode=Default}" 
    SelectedIndex="1"
    SelectedValue="{Binding Path=SelectedTechSchool, Mode=Default}" 
    SelectionChanged="TechSchoolList_SelectionChanged" 
    ItemContainerStyle="{DynamicResource TechSchoolItemContainerStyle}" 
    ScrollViewer.CanContentScroll="False" 
    ScrollViewer.VerticalScrollBarVisibility="Disabled" >
    <ListView.Background>
        <SolidColorBrush Color="{DynamicResource PanelBackgroundColor}"/>
    </ListView.Background>
</ListView>
4

3 に答える 3

3

今、私は自分で解決策を見つけました。単純なプロパティを検索しましたが、WPF のすべての UI 要素が相対的であるため、意味がありませんでした。

このコードは機能しているようです:

        UIElement selectedContainer = (UIElement) TechSchoolListView.ItemContainerGenerator.ContainerFromIndex(TechSchoolListView.SelectedIndex);
        Point cursorPos = selectedContainer.TranslatePoint(new Point(selectedContainer.DesiredSize.Width, 0.0), Page);
        PanelCursor.Height = selectedContainer.DesiredSize.Height;
        PanelCursor.Margin = new Thickness(400, cursorPos.Y, 0.0, 0.0);
于 2008-10-20T18:47:08.437 に答える
2

ContainerFromElementを使用してアイテムのコンテナーを取得する必要があります。これはビジュアルであり、そこから座標を取得できます。ただし、これを XAML で表現することはできません。選択した項目が変更されたときに発生する ListView イベントの 1 つで、コードでそれを行う必要があります。ところで、アイテムは独自のコンテナになる可能性があることに注意してください。

アイテムが選択されていることを示す添付プロパティがアイテムにないため、XAML でこれを行うことはできません。(私はしばらくWPFで遊んでいなかったので、変わったかもしれませんが)

于 2008-10-20T18:46:47.173 に答える