WrapPanel get Первый дочерний элемент при изменении размера - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть пользовательский элемент управления PianoScore , и он имеет WrapPanel для отображения многих баров. Например, вот партитура с 8 тактами.

<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>

И дело в том, что всякий раз, когда WrapPanel_Bars изменяется, мне нужно добавить скрипичный ключ и Басовый ключ для каждого первого элемента линии в строке.

Я ищу несколько методов обратного вызова, например:

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;
        }
}

Ожидаемый результат:

Сортировка BarRenderers по 3

Сортировка BarRenderers по 2

Я ценю любую вашу помощь. Спасибо.

1 Ответ

0 голосов
/ 16 апреля 2020

Получите 'sender as WrapPanel' в методе обработчика и итерируйте его свойство Children при приведении каждого дочернего элемента к BarRenderer.

...