Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2012, 14:33   #1
alyumitskij
 
Регистрация: 30.06.2012
Сообщений: 4
По умолчанию Scrollviewer blocking events

Код:
internal class myRTB : System.Windows.Controls.RichTextBox{
    internal bool editable = false;

    public myRTB(){
        this.MouseDown += new System.Windows.Input.MouseButtonEventHandler(myRTB_MouseDown);
    }
    void myRTB_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e){
        int tmp333 = 333;
    }
    protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e){
        int tmp333 = 333;
    }
    protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e){
        int tmp333 = 333;
    }
    protected override void OnMouseDoubleClick(System.Windows.Input.MouseButtonEventArgs e){
        int tmp333 = 333;
    }
    protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e){
        int tmp333 = 333;
    }
    protected override void OnPreviewMouseDown(System.Windows.Input.MouseButtonEventArgs e){
        int tmp333 = 333;
    }
}
//выставляю точки останова на событиях
--------------------------------------------------------------
Код:
//если сделать так, то ни одно из событий от мыши никогда ни в каком случае не проходит:
internal System.Windows.Controls.ScrollViewer scroll;
internal myRTB innerTextBox;
scroll = (System.Windows.Controls.ScrollViewer)System.Windows.Markup.XamlReader.Load(stream);
host.Child = scroll;
scroll.Content = innerTextBox;
--------------------------------------------------------------
Код:
//если же сделать так, то всё ок:
internal System.Windows.Controls.ScrollViewer scroll;
internal myRTB innerTextBox;
host.Child = innerTextBox;
--------------------------------------------------------------
т.е. ScrollViewer гасит все события, и они не доходят до контента. что делать? почему так?
alyumitskij вне форума Ответить с цитированием
Старый 01.07.2012, 19:26   #2
alyumitskij
 
Регистрация: 30.06.2012
Сообщений: 4
По умолчанию

Обнаружил такую штуку:
если инициализировать ScrollViewer не через xaml код
Код:
scroll = (System.Windows.Controls.ScrollViewer)System.Windows.Markup.XamlReader.Load(stream);
, а инициализировать его конструктором по умолчанию
Код:
scroll = new System.Windows.Controls.ScrollViewer();
то события от мыши к контенту ScrollViewer'а проходят хорошо.
Xaml код у меня такой:
Код:
<ScrollViewer x:Class="DeskNotes.myScrollViewer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" xmlns:c="clr-namespace:DeskNotes" x:ClassModifier="public" MouseDown="ScrollViewer_MouseDown" MouseUp="ScrollViewer_MouseUp" MouseMove="ScrollViewer_MouseMove">
            <ScrollViewer.Resources>
        <Style x:Key="{x:Type myScrollViewer}" TargetType="{x:Type myScrollViewer}">
            <Setter Property="HorizontalScrollBarVisibility" Value="Hidden"/>
            <Setter Property="VerticalScrollBarVisibility" Value="Hidden"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type myScrollViewer}">
                        <Grid>
                            <Grid Background="{TemplateBinding Background}">
                                <ScrollContentPresenter 
                                    x:Name="PART_ScrollContentPresenter"
									Width="{TemplateBinding ActualWidth}"
                                    Margin="{TemplateBinding Padding}"
                                    Content="{TemplateBinding Content}"
                                    ContentTemplate="{TemplateBinding ContentTemplate}"
                                    CanContentScroll="{TemplateBinding CanContentScroll}"/>
                            </Grid>
                            <Grid Background="Transparent">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="Auto"/>
                                </Grid.ColumnDefinitions>
                                <ScrollBar 
                                    x:Name="PART_VerticalScrollBar"
                                    Grid.Column="1"
                                    Minimum="0.0"
                                    Maximum="{TemplateBinding ScrollableHeight}"
                                    ViewportSize="{TemplateBinding ViewportHeight}"
                                    Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=VerticalOffset, Mode=OneWay}"
                                    Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"         
                                    Cursor="Arrow"
                                    AutomationProperties.AutomationId="VerticalScrollBar"/>
                            </Grid>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="false">
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter Property="VerticalScrollBarVisibility" Value="Visible"/>
                </Trigger>
            </Style.Triggers>
        </Style>
...
            </ScrollViewer.Resources>   
        </ScrollViewer>
Соответственно, делаю вывод, что не пропускает события мыши к контенту именно ScrollContentPresenter.
Видимо не пропускает из-за того, что контент ScrollContentPresenter'а забинден к контенту ScrollViewer'а.
Что сделать, чтобы до контента всё-таки доходили события мыши?
alyumitskij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ScrollViewer xil WPF, UWP, WinRT, XAML 0 20.04.2012 19:44
c++ winsock non-blocking fanatjan Общие вопросы C/C++ 0 23.12.2011 15:20
Как прикрутить Events alex_alpha Win Api 2 17.12.2010 21:14
Events в ServerSocket и ClientSocket LiFeStyle Работа с сетью в Delphi 3 22.11.2007 22:26