Vra

Ek wil 'n paar WPF elemente naby vertoon die geselekteerde item van 'n script lys. Hoe kan ek die koördinate (skerm of relatiewe) van die gekose ListViewItem kry?

<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>
Was dit nuttig?

Oplossing

Jy moet gebruik ContainerFromElement om die item se houer, kry wat is 'n visuele en van daar af kan jy die koördinate kry. Jy kan dit nie uitspreek in XAML egter. Wat jy nodig het om dit te doen in kode, op een van die script lys gebeure, opgewek wanneer die geselekteerde item verander. Btw, in gedagte hou dat die item sy eie houer kan wees.

Jy kan dit nie doen in XAML, as daar is geen aangeheg eiendom op die item wat toon die item is gekies. (Alhoewel ek nie gespeel het met WPF in 'n rukkie, so wat kan verander)

Ander wenke

Nou het ek 'n oplossing deur myself gevind. Ek het gesoek vir 'n eenvoudige eiendom, maar dit het nie sin nie, want die hele UI elemente in die WPF is relatief.

Hierdie kode lyk om saam te werk:

        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);
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top