1

デフォルトではグリッド線の表示がサポートされていないため、カスタム グリッド コントロールを作成したいと考えています。これに対する wpf ソリューションを見つけましたが、winrt には wpf がサポートする機能がほとんどありません。wpf soulution のコードは次のようなものです。

     protected override void OnRender(DrawingContext dc)
    {
        if (ShowCustomGridLines)
        {
            foreach (var rowDefinition in RowDefinitions)
            {
                dc.DrawLine(new Pen(GridLineBrush, GridLineThickness), new Point(0, rowDefinition.Offset), new Point(ActualWidth, rowDefinition.Offset));
            }

            foreach (var columnDefinition in ColumnDefinitions)
            {
                dc.DrawLine(new Pen(GridLineBrush, GridLineThickness), new Point(columnDefinition.Offset, 0), new Point(columnDefinition.Offset, ActualHeight));
            }
            dc.DrawRectangle(Brushes.Transparent, new Pen(GridLineBrush, GridLineThickness), new Rect(0, 0, ActualWidth, ActualHeight));
        }
        base.OnRender(dc);
    }

ただし、onrender メソッドをオーバーライドすることはできず、winrt には drawingcontext がありません。では、グリッドにグリッド線を描画するにはどうすればよいでしょうか? 助けてくれてありがとう!

4

2 に答える 2

2

マイクロソフトのドキュメントから:

グリッド ラインを有効にすると、グリッド内のすべての要素の周りに点線が作成されます。このプロパティは、レイアウトの問題をデバッグするための設計ツールとして意図されており、製品品質のコードでの使用を意図していないため、点線のみが使用可能です。Grid 内に線が必要な場合は、Grid 内の要素に境界線を設定します。

この理由により (デザイン ツールのみ)、メトロではグリッド線がサポートされていないため、Microsoft のドキュメントによると、子要素に境界線を配置する必要があると思います。

于 2012-09-14T12:21:46.883 に答える
2

すべての単一要素の周りに境界線を配置する必要がないようにしたい場合、私が行うことは基本的にあなたが行うことですが、xaml では、たとえば次のように本質的にそれらを描画します。

<Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="20"/>    
            <RowDefinition Height="20"/>
            <RowDefinition Height="20"/>
            <RowDefinition Height="20"/>
            <RowDefinition Height="20"/>        
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="20"/>
        </Grid.ColumnDefinitions>
        <!-- Horizontal Lines -->
        <Rectangle Grid.ColumnSpan="5" Height="1" VerticalAlignment="Bottom" Fill="Black"/>
        <Rectangle Grid.Row="1" Grid.ColumnSpan="5" Height="1" VerticalAlignment="Bottom" Fill="Black"/>
        <Rectangle Grid.Row="2" Grid.ColumnSpan="5" Height="1" VerticalAlignment="Bottom" Fill="Black"/>
        <Rectangle Grid.Row="3" Grid.ColumnSpan="5" Height="1" VerticalAlignment="Bottom" Fill="Black"/>
        <Rectangle Grid.Row="4" Grid.ColumnSpan="5" Height="1" VerticalAlignment="Bottom" Fill="Black"/>
        <!-- Vertical Lines -->
        <Rectangle Grid.RowSpan="5" Width="1" HorizontalAlignment="Right" Fill="Black"/>
        <Rectangle Grid.Column="1" Grid.RowSpan="5" Width="1" HorizontalAlignment="Right" Fill="Black"/>
        <Rectangle Grid.Column="2" Grid.RowSpan="5" Width="1" HorizontalAlignment="Right" Fill="Black"/>
        <Rectangle Grid.Column="3" Grid.RowSpan="5" Width="1" HorizontalAlignment="Right" Fill="Black"/>
    </Grid>
</Border>

このようにして、セルを好きなように配置でき、すべてをボーダーにネストする必要がなくなります。それが役に立てば幸い。乾杯!

于 2012-09-14T14:55:22.320 に答える