简体   繁体   中英

WrapPanel get First child element when resizing

I have a user control PianoScore and it has WrapPanel in order to display many bars. For example, here is a piano score with 8 bars.

<ScrollViewer VerticalScrollBarVisibility="Auto">
    <WrapPanel Name="WrapPanel_Bars" Orientation="Horizontal" >
        <local:BarRenderer></local:BarRenderer>
        <local:BarRenderer></local:BarRenderer>
        <local:BarRenderer></local:BarRenderer>
        <local:BarRenderer></local:BarRenderer>
        <local:BarRenderer></local:BarRenderer>
        <local:BarRenderer></local:BarRenderer>
        <local:BarRenderer></local:BarRenderer>
        <local:BarRenderer></local:BarRenderer>
    </WrapPanel>
</ScrollViewer>

And the thing is, whenever the WrapPanel_Bars gets resized, I need to add a Treble Clef and Bass Clef to every first bar element of the line.

I'm looking for some callback methods for example:

private void WrapPanel_Bars_SizeChanged(object sender, SizeChangedEventArgs e)
{
        var renderers[] = /* How can I get every first BarRenderer of WrapPanel??? */
        foreach (var renderer in renderers)
        {
            // Set renderer's clefs
            renderer.UpClef = Clefs.Treble;
            renderer.DownClef = Clefs.Bass;
        }
}

Expected result:

Sorting BarRenderers by 3

Sorting BarRenderers by 2

I appreciate any kind of your help. Thanks.

Get 'sender as WrapPanel' in the handler method and iterate its Children property while casting each child to BarRenderer.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM