Я новичок в WPF и XAML. Я работаю над интерфейсом рояля пианино для чтения MIDI-файлов, который пока выглядит примерно так:
https://i.imgur.com/hBJZhnH.png
У меня есть холст для всего рулона пианино (обернутый вокруг ScrollViewer для горизонтальной и вертикальной прокрутки). На этом холсте у меня есть сетка grdPiano
для рисования нот фортепиано, сетка grdGridColours
для рисования цветов заливки горизонтальной строки, холст cnvGridLines
, где я рисую вертикальные линии сетки (это делается в коде C #) и сетку grdNotes
, где я рисую ноты MIDI в коде C #.
Это работает нормально, но когда я прокручиваю горизонтально, клавиши пианино (grdPiano
) прокручиваются вне поля зрения. Я хочу, чтобы при прокрутке по вертикали все прокручивалось, но если прокручивать по горизонтали, клавиши пианино остаются замороженными в левой части экрана. Я возился с вложенными ScrollViewers, но не могу заставить его работать.
Вот мой XAML:
<ScrollViewer x:Name="srlPianoScroll" Margin="125,20,0,0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Canvas x:Name="cnvPianoRoll" HorizontalAlignment="Left" Height="1592" VerticalAlignment="Center" Width="132">
<Grid x:Name="grdPiano" HorizontalAlignment="Left" Height="1638" VerticalAlignment="Center" Width="132" Canvas.Top="-8">
<Grid.RowDefinitions>
<!--Row definitions...-->
</Grid.RowDefinitions>
<!--Drawing piano notes...-->
</Grid>
<Grid x:Name="grdGridColours" HorizontalAlignment="Left" Height="1628" VerticalAlignment="Center" Width = "0" Canvas.Top="2" Canvas.Left="132" Panel.ZIndex="1">
<Grid.RowDefinitions>
<!--Row definitions...-->
</Grid.RowDefinitions>
<!--Drawing horizontal fill colours...-->
</Grid>
<Canvas x:Name="cnvGridLines" HorizontalAlignment="Left" Height="1592" VerticalAlignment="Center" Width = "0" Canvas.Top="2" Canvas.Left="132" Panel.ZIndex="2"/>
<!--Vertical grid lines are drawn programatically.-->
<Grid x:Name="grdNotes" HorizontalAlignment="Left" Height="1628" VerticalAlignment="Center" Width = "0" Canvas.Top="2" Canvas.Left="132" Panel.ZIndex="3">
<Grid.RowDefinitions>
<!--Row definitions...-->
</Grid.RowDefinitions>
</Grid>
</Canvas>
</ScrollViewer>
Спасибо!