2017-02-04 14 views
1

私は実行時にカスタムクラスの要素をインスタンス化する単純なアプリケーションを作成しています(このクラスはいくつかのControl要素で構成されています:Textblocks、Grids)。私の作業領域は簡単に過密になる可能性があるので、私はアプリケーションのメイングリッドをスクロール可能にしたい。動的に作成された要素を含むスクロール可能なWPFウィンドウ?

私はScroll Viewerでグリッドをカプセル化しました。この方法でGridの幅と高さを増やして、水平と垂直のスクロールバーを表示します。私の問題は、私のカスタムクラスのインスタンスがであるかどうかを確認する方法がわからないことです。作業領域内に完全に、またはその一部が伸びています。私の問題HEREを解決する可能性のある方法を見つけましたが、多くの要素があるため、すべてをチェックする必要があります。パフォーマンスが容易になる別の方法がありますか?

また、私の要素がその領域をどの程度超えているかを知る必要があるので、私はそれに応じてグリッドのサイズを増やすだけです。私はWPFを初めて使っているので、どんな提案も高く評価されています!ここで enter image description here 私のXAMLの関連する部分である:ここで

を模式的に私の考えです

<ScrollViewer VerticalScrollBarVisibility="Visible" 
       HorizontalScrollBarVisibility="Auto" 
       CanContentScroll="True"> 
    <Grid 
    x:Name="MainGrid" 
    Background="Transparent" 
    MouseLeftButtonUp="grid_MouseLeftButtonUp"> 
     <ItemsControl> 
      <!--HERE I HAVE A NUMBER OF OTHER ELEMENTS PREDEFINED--> 
     </ItemsControl> 
     <Grid.ContextMenu> 
      <!--HERE I HAVE CONTEXTMENU ELEMENTS--> 
     </Grid.ContextMenu> 

    </Grid> 
</ScrollViewer> 

答えて

1

あなたが位置する項目のMarginプロパティを使用する場合、グリッドはあなたのための自動サイズ変更を処理できる必要がありますそれら。アイテムが完全に視野に収まらない例は:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="400" Width="400"> 

    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <Grid x:Name="MainGrid" Background="Transparent"> 
      <Border Background="Blue" Width="250" Height="250" Margin="350 0 0 0" HorizontalAlignment="Left" VerticalAlignment="Top"></Border> 
      <Border Background="Red" Width="250" Height="250" Margin="0 150 0 0" HorizontalAlignment="Left" VerticalAlignment="Top"></Border> 
     </Grid> 
    </ScrollViewer> 
</Window> 

上記の例では、スクロールバーが表示されるようになり:

WPF Scrollview Grid content fits

:コンテンツがビューに合うならば何のスクロールバーをありません

WPF Grid Scrollview

少し変更されたCanvasを使用するなど、いくつかのオプションがあります。 WPF: How to make canvas auto-resize?

+0

実際には、私は絶対配置が必要なので、グリッドの内側(データテンプレート内で定義されている)のキャンバスを使用しています。カスタムクラス要素はbuttonClickEventに表示されますマウスポイントはキャンバス上にあるので、私は外部グリッド上でマウスイベントを処理します。したがって、問題は、グリッドをより大きくするために、グリッド内のCanvasを取得する方法です。申し訳ありませんが、私はこれに特化していませんでした。 – rTECH

関連する問題