キャンバスに等間隔に線を引きグリッドの様に背景に表示させておこうとしています。
キャンバスサイズも変更させたいのでサイズを変更する時にグリッドを再描画させています。
しかし再描画する際に線だけを消す方法が分からず線以外の子要素も消えてしまいます。
MainWindow.xaml
C#
1 <Grid> 2 <ScrollViewer HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" 3 VerticalScrollBarVisibility="Auto" VerticalAlignment="Stretch" Margin="0,0,0,235"> 4 <Canvas Name="gridCanvas" Background="#FF444444" Width="500" Height="70" SnapsToDevicePixels="True" HorizontalAlignment="Left" Margin="0,0,0,249"> 5 <Thumb Canvas.Top ="5" Canvas.Left="5" Width="30" Height="30" Name="thmub" /> 6 <StackPanel Canvas.Top="5" Canvas.Left="40" Width="30" Height="30" Background="#FFE66262"/> 7 </Canvas> 8 </ScrollViewer> 9 <Slider Name="slider" HorizontalAlignment="Left" Margin="10,105,0,0" VerticalAlignment="Top" Width="490" ValueChanged="Slider_ValueChanged"/> 10 </Grid>
キャンバスには色付けしたThumbとStackPanelを配置してあります。
スライダーでキャンバスサイズを変更します。
MainWindow.xaml.cs
C#
1 public partial class MainWindow : Window 2 { 3 public MainWindow() 4 { 5 InitializeComponent(); 6 CreateGridView(500); 7 } 8 9 //スライダー変更でキャンバスのサイズ変更 10 private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 11 { 12 int width = 500 + (int)slider.Value * 5; 13 gridCanvas.Width = width; 14 //グリッドの再描画 15 CreateGridView(width); 16 } 17 18 //グリッドの描画 19 private void CreateGridView(int gw) 20 { 21 //線だけ消す方法が分かりません。 22 //ThumbやStackPanelも線の上に表示させたいです。 23 gridCanvas.Children.Clear(); 24 int GRID_SIZE_W = gw; //横上限 25 int GRID_SIZE_H = 70; //縦上限 26 int span_W = gw / 10; //横間隔 27 int span_H = 70 / 3; //縦間隔 28 29 //縦線 30 for (int i = 0; i < GRID_SIZE_W; i += span_W) 31 { 32 gridCanvas.Children.Add(new Line() 33 { 34 X1 = i, 35 Y1 = 0, 36 X2 = i, 37 Y2 = GRID_SIZE_H, 38 Stroke = Brushes.LightGray, 39 StrokeThickness = 2, 40 }); 41 } 42 43 //横線 44 for (int i = 0; i < GRID_SIZE_H; i += span_H) 45 { 46 gridCanvas.Children.Add(new Line() 47 { 48 X1 = 0, 49 Y1 = i, 50 X2 = GRID_SIZE_W, 51 Y2 = i, 52 Stroke = Brushes.LightGray, 53 StrokeThickness = 2, 54 }); 55 } 56 } 57 }
gridCanvas.Children.Clear();で前に描画されたグリッドを全て消しているのですが、その際に子要素も消えてしまいます。
これを線だけを消すようにしたいのですが方法が分からないので教えてください。
あとChildre.Clear()で消さない場合もThumbとStackPanelが線の後ろ側に表示されるのも解決したいです。
線だけを別のキャンバスに描くような方法はあるのでしょうか?
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/02 05:57