2017-12-29 48 views
0

キャンバスをスクロールバーに入れて、ズームとパンができるようにしました。しかし、私はまた、ユーザーの入力要素(テキストボックス、画像など)をピンチ機能でリサイズできるようにしようとしています。ここではインタフェースの基礎のための私のXAMLコードは次のとおりです。UWPキャンバスのUI要素をScrollViewerでサイズ変更

<Grid> 
    <RelativePanel> 
     <Button ... /> 
     <Button ... /> 
     <Button /> 

     <ScrollViewer 
     VerticalScrollMode="Auto" 
     HorizontalScrollMode="Auto" 
     HorizontalScrollBarVisibility="Visible" 
     VerticalScrollBarVisibility="Visible" 
     ZoomMode="Enabled" 
     MinZoomFactor="1" 
     MaxZoomFactor="5" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     RelativePanel.Below="AddTextButton"> 

      <Canvas Name="parentCanvas" Height="10000" Width="10000" > 

       <InkCanvas Name="inkCanvas" Height="10000" Width="10000" 
         Visibility="Visible" /> 

      </Canvas> 

     </ScrollViewer> 
    </RelativePanel> 
</Grid> 

私も(ドラッグ/サイズを変更)テキストボックスを追加し、操作イベントを処理するために、このC#のコードを持っている:

public void AddTextButton_Click(object sender, RoutedEventArgs e) 
    { 
     TextBox MyTextBox = new TextBox(); 
     MyTextBox.Background = new SolidColorBrush(Colors.White); 

     MyTextBox.PlaceholderText = "Text"; 
     MyTextBox.Width = 250; 
     MyTextBox.Height = 100; 

     ManipulationMode = ManipulationModes.All; 
     MyTextBox.RenderTransform = textBoxTransforms; 
     AddHandler(ManipulationDeltaEvent, new ManipulationDeltaEventHandler(TextBox_ManipulationDelta), true); 
     parentCanvas.Children.Add(MyTextBox);   
    } 

    void TextBox_ManipulationDelta(object sender, 
     ManipulationDeltaRoutedEventArgs e) 
    { 
     // Move the TextBox. 

     dragTextBox.X += e.Delta.Translation.X; 
     dragTextBox.Y += e.Delta.Translation.Y; 

     resizeTextBox.ScaleX *= e.Delta.Scale; 
     resizeTextBox.ScaleY *= e.Delta.Scale; 
    } 

このC#のコードをキャンバスがスクロールビューアに含まれていない場合に機能します。スクロールビューアでサイズ変更(タッチ/ピンチ機能付き)を行う方法に関する提案はありますか?

ありがとうございます!

答えて

0

残念ながら、ScrollViewerTextBox操作のための良い解決策はありません。

が@Rob Where did all my gestures go?から

ScrollViewerのがスクロールを実行するために、ポインタの取り扱いを引き継ぐのブログを参照してください。 ScrollViewerのは、それは...アプリはそれら

で独自の機会を持たずに

をポインタと操作イベントをすべて処理担当になったらアプリはスクロールやジェスチャーの両方を必要とする場合は残念ながら良い解決策は(ありませんたとえば、スクロールに対してCrossSlidesを検出するなど)。この場合、ポインターメッセージをどこからでも取得できる唯一のオプションは、どこでも直接操作を無効にすることですが、スクロールも無効にします。これを元に戻すには、スクロールジェスチャ自体を検出し、ScrollToHorizo​​ntalOffsetまたはScrollToVerticalOffsetを使用してScrollViewerを新しい位置に移動するか、SelectedIndexを更新する必要があります。これは手間がかかり、ScrollViewerにその処理をさせるよりも著しく遅くなります。可能な限り避けるべきです。

関連する問題