2015-04-08 3 views
0

У меня есть следующие в элементе управления пользователя:Windows Phone 8,1 UserControl с холста в ScrollViewer не работает

<Grid Background="#FFEEEEEE" Margin="0,0,0,0"> 
    <TextBlock x:Name="TitleLabel" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Foreground="Black" FontSize="16" FontWeight="Bold"/> 

    <Border BorderBrush="#FFE2E2E2" Margin="10,60,20,80" CornerRadius="4" BorderThickness="2"> 
     <Grid Background="#ffffffff"> 
      <Grid x:Name="SignatureGrid" Background="Transparent"> 
       <TextBlock TextWrapping="Wrap" Text="Sign here" Foreground="#FFEEEEEE" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="100"/> 
       <Border BorderBrush="#FF333333" BorderThickness="1" Height="1" VerticalAlignment="Bottom" Margin="20,0,20,50" /> 
       <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Sign here" VerticalAlignment="Bottom" Foreground="#FF333333" FontSize="14" Margin="20,0,0,27"/> 
      </Grid> 

      <Canvas x:Name="inkCanvas" Background="Transparent" PointerPressed="inkCanvas_PointerPressed" PointerMoved="inkCanvas_PointerMoved" PointerReleased="inkCanvas_PointerReleased" /> 
     </Grid> 
    </Border> 

    <Button x:Name="ClearButton" Content="Clear" HorizontalAlignment="Right" Margin="0,0,20,20" VerticalAlignment="Bottom" Width="162" Background="#FF46B2D5" BorderThickness="0,0,2,0" Click="Button_Click"/> 
</Grid> 

Я тогда страницу, которая содержит следующее:

<ScrollViewer Grid.Row="2" x:Name="QuestionsScroller" HorizontalAlignment="Stretch" ZoomMode="Disabled" HorizontalScrollMode="Disabled" > 
     <StackPanel x:Name="SectionContentPanel" /> 
    </ScrollViewer> 

В код страницы позади меня динамически добавляет элемент управления (и другие элементы управления) в стеке. В текущей форме холст не работает, но если я удалю ScrollViewer, холст отлично работает, но я, очевидно, не могу прокручивать элементы управления под ним.

В моем случае PointerMoved у меня есть:

Point currentPoint = e.GetCurrentPoint(inkCanvas).Position; 
if (_startPoint != currentPoint) 
{ 
    _line.Points.Add(currentPoint); 
    mHasDrawing = true; 
} 

С ScrollViewer начальную и конечную точку никогда не отличается (я предполагаю, потому что полотно движется с моим пальцем/мышь, как я перетащить по экрану/эмулятора. Без ScrollView, как я уже сказал, это работает, как ожидалось.

Таким образом, вопрос, как я могу реализовать Canvas в ScrollViewer?

ответ

0

После возится с этим на некоторое время, я задал вопрос о StackOverflow, затем wi тонкий 10minutes я понял это - Вот ответ для тех, кто хочет сделать то же самое:

В вашем PointerPressed случае вам необходимо отключить режим прокрутки ScrollViewer:

private void inkCanvas_PointerPressed(object sender, PointerRoutedEventArgs e) 
    {    
     //get to the scrollViewer 
     StackPanel sp = (StackPanel)this.Parent; 
     ScrollViewer sv = (ScrollViewer)sp.Parent; 
     sv.VerticalScrollMode = ScrollMode.Disabled; 

     //Rest of code. 
    } 

В этот момент Canvas будет но вы еще не сможете прокручивать, пока вы снова не включите ScrollViewer. Вы можете сделать это в событии PointerReleased:

private void inkCanvas_PointerReleased(object sender, PointerRoutedEventArgs e) 
    { 
     //get to the scrollViewer 
     StackPanel sp = (StackPanel)this.Parent; 
     ScrollViewer sv = (ScrollViewer)sp.Parent; 
     sv.VerticalScrollMode = ScrollMode.Auto; 

     //Rest of code 
    } 
Смежные вопросы