powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / UserControl + ScrollBar + ScrollEvent
2 сообщений из 2, страница 1 из 1
UserControl + ScrollBar + ScrollEvent
    #37428856
Alex Shulg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Пытаюсь реализовать в своем контроле поддержку ScrollEvent от ScrollBar, упакованного в UserControl:
XAML:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<UserControl x:Class="GView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300" >
    <Grid Background="{x:Null}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        ...
        <ScrollBar Grid.Column="1" Grid.Row="0" 
                   Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Left" 
                   Value="50" Maximum="100" Width="18"
                   Visibility="{Binding VerticalScrollVisibility}" Scroll="ScrollBar_Scroll" />
    </Grid>
</UserControl>
Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    public partial class GView : UserControl
    {
        public static readonly RoutedEvent ScrollEvent = 
            EventManager.RegisterRoutedEvent("Scroll", RoutingStrategy.Bubble, typeof(ScrollEventHandler), typeof(GView));

        public event ScrollEventHandler Scroll
        {
            add { AddHandler(ScrollEvent, value); }
            remove { RemoveHandler(ScrollEvent, value); }
        }
        private void ScrollBar_Scroll(object sender, ScrollEventArgs e)
        {
        }
Использование в программе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
GView view = new GView();
view.Scroll += OnScroll;

private void OnScroll(object sender, ScrollEventArgs e)
{
   ...
}
Не догоняю, чего нужно написать в ScrollBar_Scroll контрола, чтобы отработал OnScroll в программе.

Можно конечно написать так:
Код: plaintext
1.
2.
3.
4.
public event ScrollEventHandler Scroll
        {
            add { scrollbar.Scroll += value; }
            remove { scrollbar.Scroll -= value; }
        }
В этом случае надобность в RoutedEvent ScrollEvent и void OnScroll(...) вообще отпадает. Но в данном варианте я теряю возможность привязаться к событию Scroll в XAML, т.е. такой вариант не пройдет:
Код: plaintext
<GView ... Scroll="OnScroll" />
Заранее благодарю.
...
Рейтинг: 0 / 0
UserControl + ScrollBar + ScrollEvent
    #37428876
Alex Shulg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так всегда...
Намучаешься попытками, напишешь в форум. Пока ждешь ответ, пробуешь дальше другие варианты, пытаешься разобраться. И опаньки, вот оно решение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
public partial class GView : UserControl
    {
        public static readonly RoutedEvent ScrollEvent = ScrollBar.ScrollEvent.AddOwner(typeof(GView));

        public event ScrollEventHandler Scroll
        {
            add { AddHandler(ScrollEvent, value); }
            remove { RemoveHandler(ScrollEvent, value); }
        }
И накаких void ScrollBar_Scroll(object sender, ScrollEventArgs e) в классе не надо!
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / UserControl + ScrollBar + ScrollEvent
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]