Shelke Amit Ответов: 2

Синхронизация прокрутки Listbox и Textbox/TextBlock control WPF


Я пытаюсь создать WPF Usercontrol, где есть три элемента управления

-список

-Текстовое поле или текстовый блок

-полоса прокрутки

Я хочу синхронизировать прокрутку между всеми ними.


<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100"></ColumnDefinition>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition Width="20*" />
    </Grid.ColumnDefinitions>

    <ListBox Grid.Column="0" HorizontalAlignment="Left" Name="lstNumber" Width="100" FontFamily="Courier New" FontSize="12" Background="Aqua" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.ScrollChanged="RichTextBox_ScrollChanged"/>
    <TextBox Grid.Column="1" HorizontalAlignment="Stretch" Name="txtData" Width="Auto" FontFamily="Courier New" FontSize="12" Margin="101,0,0,0" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.ScrollChanged="RichTextBox_ScrollChanged"/>
    <ScrollBar Grid.Column="3" HorizontalAlignment="Right" Scroll="ScrollBar_Scroll"/>
</Grid>







Связанный код C# для этого события.


private void RichTextBox_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        if (sender == txtData)
        {
            //what to do now?
        }
        if (sender == lstNumber)
        {
            //what to do now?
        }
    }





Как добиться такой функциональности?

Subramanyam Shankar

используйте прокрутку в поле зрения . используйте его как каскад, так что если одно изменяется, то меняется и другое.

Sergey Alexandrovich Kryukov

Вообще, это очень плохая дизайнерская идея. Вы можете потратить на это слишком много времени и все равно получить плохие результаты. Я бы посоветовал вместо этого перепроектировать пользовательский интерфейс. Возможно, я мог бы помочь, но я не знаю конечных целей этой деятельности.
—СА

2 Ответов

Рейтинг:
2

Shaikh Javed Aryan

Вы можете использовать прокрутку с помощью User32


Const WM_USER As Integer = &H400
Const EM_GETSCROLLPOS As Integer = WM_USER + 221
Const EM_SETSCROLLPOS As Integer = WM_USER + 222

Объявить функции SendMessage Либ "user32.dll" псевдоним "SendMessageW" (как byval в качестве указателя IntPtr hwnd элемента, бывал МСГ как целое число, параметр wparam бывал как целое, как byref параметр lparam как точка) Как Целое Число

Private Sub RichTextBox2_VScroll(бывал отправитель как система.Объект, бывал е как система.EventArgs) Обрабатывает RichTextBox2.VScroll

Тусклый pt как точка

SendMessage(RichTextBox2.Handle, EM_GETSCROLLPOS, 0, pt)

SendMessage(RichTextBox1.Handle, EM_SETSCROLLPOS, 0, pt)

Конец Подводной Лодки


Richard Deeming

ДВА С ПОЛОВИНОЙ ГОДА слишком поздно, и с ответом, который не будет работать в WPF.

Рейтинг:
0

Shelke Amit

Я пытаюсь показать текстовый файл как редактор кода. Где должны быть доступны 3 вещи

- Номер строки
- Выделите аналогичный текст, когда я выделяю текст во всем загруженном файле.
- для прокрутки должна быть доступна отдельная полоса прокрутки
- До & вниз, страница вверх &амп; ПГ вниз, Home &амп; завершения вызова с клавиатуры должны работать для прокрутки.