كيف يمكنني الحصول على إحداثيات حاوية العنصر المحدد في ListView WPF

StackOverflow https://stackoverflow.com/questions/219369

سؤال

وأريد لعرض بعض عناصر WPF بالقرب من العنصر المحدد من ListView. كيف يمكنني الحصول على الإحداثيات (الشاشة أو النسبية) في 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>
هل كانت مفيدة؟

المحلول

ويجب عليك استخدام ContainerFromElement للحصول على الحاويات العنصر، الذي هو البصرية ومن هناك يمكنك الحصول على الإحداثيات. لا يمكنك التعبير عن هذا في XAML، ولكن. ما عليك القيام به في التعليمات البرمجية، على واحدة من الأحداث ListView الذي أثار عند تغيير العنصر المحدد. راجع للشغل، أن نضع في اعتبارنا أن البند يمكن أن تكون الحاوية الخاصة به.

وأنت لا تستطيع أن تفعل ذلك في XAML، كما لم يكن هناك خاصية تعلق على العنصر الذي يظهر من تحديد البند. (على الرغم من أنني لم ألعب مع برنامج الأغذية العالمي في حين، بحيث قد تغيرت)

نصائح أخرى

والآن لقد وجدت الحل بنفسي. لقد بحثت عن خاصية بسيطة، لكنه جعل لا معنى له، لأن جميع عناصر واجهة المستخدم في WPF قريبة.

وهذا الرمز يبدو أن العمل:

        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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top