Xamarin.Formsでグリッドを構築しています。そして、テーブルのような境界線を追加したいと思います。行と列を定義するときに境界線を追加できると思いましたが、失敗しました。誰も私を助けることができますか?これが私の現在のコードです。
Grid grid = new Grid {
VerticalOptions = LayoutOptions.FillAndExpand,
RowDefinitions = {
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
},
ColumnDefinitions = {
new ColumnDefinition { Width = new GridLength (1, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength (5, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength (1, GridUnitType.Star) },
}
};
Border
にはGridView
プロパティはありませんが、次のとおりです。
grid.BackgroundColor
希望する境界色の値に設定し、grid.ColumnSpacing
およびgrid.RowSpacing
をいくつかの値に設定し、グリッドに追加するすべてのコントロールにBackgroundColor
が正しく設定されていることを確認します。
カスタムレンダラーまたはエフェクトを作成する必要のない完全な回答(XAML)を以下に示します。
コードは少し冗長ですが理解しやすく、結果は画像のようになります
グリッドに境界線を配置するコードを次に示します(さらに、左端に青い線がないことに気付くように、境界線を完全に制御できます)
<Grid BackgroundColor="White">
<Grid.RowDefinitions>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="1" />
</Grid.ColumnDefinitions>
<BoxView Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Vertical lines and no "stuff"-->
<BoxView Grid.Column="1" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="3" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="5" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="7" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
</Grid>
私の例はSturlaの例に似ていますが、少し違うので、そのままにしておきます。
コードはあまりきれいではありませんが、各列の間に1px BoxView
を追加し、Grid
の上部に1つ、Grid
の下部に1つ追加することで、同様のことを行いました。 、 そのようです:
<Grid VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
RowSpacing="0"
ColumnSpacing="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<BoxView BackgroundColor="Black"
HeightRequest="1"
HorizontalOptions="FillAndExpand"
Grid.Row="0"/>
<Grid VerticalOptions="Start"
ColumnSpacing="0"
Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="1"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Text="Button 1"/>
<BoxView BackgroundColor="Black"
WidthRequest="1"
VerticalOptions="FillAndExpand"
Grid.Column="1"/>
<Button Text="Button 1"
Grid.Column="2"/>
</Grid>
<BoxView BackgroundColor="Black"
HeightRequest="1"
HorizontalOptions="FillAndExpand"
Grid.Row="2"/>
</Grid>
*編集:これを書いてから、私はそれをやる方法を少し変えました。ダニエル・ルバーダの答えのように、Grid.BackgroundColor
をColor.Black
に設定するだけで、BoxView
sをすべて削除して完了です。これは、特に上記のようなものをListView
に入れている場合、画面上にビューをほとんど持たない方がはるかに良いと思うためです。
また、ページの読み込み時に(ScaleTo()
を使用して)多くのページがButton
sをアニメーション化するため、最初にGrid.BackgroundColor
をColor.Transparent
またはColor.White
に設定し、アニメーションが完了したら変更しますそれをColor.Black
に。これまでのところかなりうまく機能しています。
Daniel Luberda's anwserよりも境界線が等しいソリューションが必要な場合は、次のようにします。
要素に境界線を追加するグリッドを作成します。コロンと行の間隔を0にします。グリッドの各要素に対して、Boxviewを含む別のGridを作成し、そのBoxviewの上にビューを作成します。次に、各BoxViewを入力して展開します。次に、これらの「アンダー」グリッドのパディングを自由に調整します。グリッドの各要素は等しく分離されます。
これはかなり重いです。