2011-07-11 20 views
1

グリッドのカーソルとして使用するオーバーレイ区切りのグリッドがあります。グリッドのActualHeightの割合に余白を設定することによって、プログラム上、区切り記号をグリッド上で移動しています。これは、マージンが(grid.ActualHeight/2)以上に設定され、その時点でセパレータが表示されなくなるまでうまく動作します。余白が下半分のグリッドに表示されるときにグリッド項目が表示されない

私は垂直方向のアラインメント(上にデフォルト設定されています)をボトムまたはセンターに設定し、同様の結果で適切に位置を変更しようとしました。

グリッドがセパレータを隠す何らかの理由はありますか?セパレータが確実に表示されるようにするにはどうすればよいですか?

おかげで、 スチュアート

編集:ここでは

は、グリッドのXAMLです。枠線はプログラムによってグリッドに追加されるため、グリッドには行と列が含まれています。

<Grid Name="graph1" Grid.Row="1" Margin="2" MouseLeftButtonDown="MouseDown" Background="#00000000"> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Separator Name="graph1Cursor" Grid.RowSpan="5" Grid.ColumnSpan="6" VerticalAlignment="Top"/> 
    </Grid> 

私はマージンを設定するために使用していたコード:yはグリッドのActualHeightに対するカーソル位置の高さ

graph1Cursor.Margin = new Thickness(0, y, 0, y); 

+0

あなたは、セパレータを使用してグリッドXAMLを投稿することができますか? – Rachel

+0

XAMLを含めるように投稿を編集したほか、カーソルの位置をプログラムで設定しています。 – Stuart

答えて

1

解決策が見つかったのですが、なぜソリューションが元のものよりも優れているのか分かりません... Gridに直接セパレータを置くのではなく、StackPanel内に入れ子にしました。それ以外のコードはすべて同じままです。ここで

は、ネストされたのStackPanelとグリッドのためのXAMLです:

<Grid Name="graph1" Grid.Row="1" Margin="2" MouseLeftButtonDown="MouseDown" Background="#00000000"> 
      <Grid.RowDefinitions> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <StackPanel Grid.RowSpan="5" Grid.ColumnSpan="6"> 
       <Separator Name="graph1Cursor" VerticalAlignment="Top" /> 
      </StackPanel> 
     </Grid> 

答えとして、私はこれをマークします。誰かがより良い解決策を持っているなら、私はそれを批評するつもりです。

0

他の解決策ではなく、セパレーターからGrid.RowSpan-プロパティをGrid.Row-プロパティを設定することで、あなたのコードに比べて唯一再び行-プロパティの設定:

XAML:

<Grid Name="graph1" Grid.Row="1" Margin="2" Background="#00000000"> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Button Click="Button_Click"/> 
    <Separator Name="graph1Cursor" Grid.Row="1" Grid.ColumnSpan="6" VerticalAlignment="Top"/> 
</Grid> 
をあなたのコードで

、ヨーヨーがgraph1Cursorから行-プロパティを設定します。

Grid.SetRow(graph1Cursor, 4); 
+0

唯一の問題は、Gridの高さに基づいて行の高さを取得するために余分な計算をしない限り、Grid内の正確な位置、行の端の位置のみを表示することができないことです。 – Stuart

関連する問題