2016-09-06 32 views
1

列と行のヘッダーを含むカスタムグリッドを作成しました。グリッド内のセルは空です。私がやろうとしているのは、スクロールに関して、そのような優れた振る舞いを作り出すことです。私は水平と垂直スクロールバーを追加する必要があります。縦方向にスクロールするときは、列ヘッダーをスクロールするための場所と行ヘッダーが必要です。あなたが水平にスクロールするときには、私は行の列をスクロールするために所定の位置に、列のヘッダーが必要です。グリッドに現在あるコードは次のとおりです。WPF静的な列と行のヘッダーでスクロールできるグリッドを作成する方法

<Canvas x:Name="canvas_blueprint" ClipToBounds="True" Width="{Binding ActualWidth, ElementName=canvas}" Height="{Binding ActualHeight, ElementName=canvas}"> 
      <DockPanel> 
       <Grid x:Name="grid_column_header" DockPanel.Dock="Top" Height="25" Width="{Binding ActualWidth, ElementName=canvas}"></Grid> 
       <Grid x:Name="grid_row_header" DockPanel.Dock="Left" Width="25" Height="{Binding ActualHeight, ElementName=canvas}" Margin="0,-25,0,0"></Grid> 
       <Grid x:Name="grid_blueprint" DockPanel.Dock="Right" Height="{Binding ActualHeight, ElementName=image_blueprint}" Width="{Binding ActualWidth, ElementName=image_blueprint}"> 
        <Grid.Background> 
         <ImageBrush x:Name="imagebrush_blueprint"/> 
        </Grid.Background> 
       </Grid> 
      </DockPanel> 
     </Canvas> 

基本的に3つのグリッドを含むドックパネル付きのキャンバスです。ヘッダーは2グリッド、内側セルは1グリッド。セルは動的に作成されます。

グリッド上に背景画像を重ねる必要があるため、カスタムグリッドを作成しています。私は無料のスプレッドシートコントロールを使用しようとしましたが、背景イメージを持つことができるものは見つかりませんでした。私のグリッドが持つ必要がある唯一の他の動作は、セルまたはセルの範囲を選択する能力です。

私はグリッドでスクロールバーとスクロールビューアを試しましたが、それは線がぼんやりと不均一になります。私はWPFプログラミングには新しくないが、私は専門家の近くにはどこにもいない。どんな助けもありがとう。

+0

が私たちの答えはキャンバスを取り除くことを含むことができる、またはあなたがその特定の何かのためにそれを使用している:ここでは

を使用すると、個々の細胞に、特別な背景色、および書式の他のタイプを適用する方法ですあなたが提供したコードにはありませんか? –

+0

もちろんキャンバスを取り除くことができます。 – Savantasaurus

答えて

2

私は単なるDataGridを使用します。既にヘッダーが自動的にフリーズし、FrozenColumnCountプロパティで列をフリーズできます。

BackgroundプロパティをImageBrushに設定すると、背景イメージを作成できます。

範囲を選択するには、SelectionModeDataGridSelectionMode.Extendedに設定します。

<DataGrid.CellStyle> 
    <Style TargetType="{x:Type wpf:DataGridCell}"> 
     <Setter Property="Background" Value="{Binding SomeColorProperty, Converter={StaticResource cellBackgroundConverter}}" /> 
     <Setter Property="FontWeight" Value="{Binding SomeWeightProperty, Converter={StaticResource cellWeightConverter}}" /> 
     ..... 
    </Style> 
</DataGrid.CellStyle> 
+0

このようにDataGridを使用すると、excelのような空のセルを持つことはできますか?基本的に私はグリッドラインが欲しいですが、私は単一の 'セル'を選択して、そのセルにカノーム化されたスタイルを追加できるようにしたいと考えています。私はまた、細胞の選択を強調する能力が必要です。 – Savantasaurus

+0

このようにして選択を行うことはできますが、そのような個々のセルを書式設定するのは難しいことがあります。どのような形式のバリエーションがありますか?このアプリケーションにMVVMパターンを使用していますか? –

+0

私はこれがMVVMを使用してどのように動作するかについて熟知しているだけで、コードビハインドでこれをやろうとはしませんでした。基本的な考え方は、特定のプロパティ(背景、フォントスタイル、フォントウェイトなど)を設定するための 'Setter'と、ビューモデルのプロパティにバインドされた値を使ってグリッドに' CellStyle'を設定することです細胞のおそらく 'ValueConverter'が必要になります。 –

関連する問題