wpfでuniformGridを作りたいです。
子が 1 人いる場合はグリッドを埋め、子が 2 人いる場合は 2 列、3 人または 4 人いる場合は 2 行と 2 列にします。
そこで、グリッドにある子の数をチェックし、それに基づいて行/列の数を決定するコンバーターを作成しました。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Controls;
using System.Windows;
using System.Globalization;
namespace UserControlSolution.Converter
{
[ValueConversion(typeof(int), typeof(int))]
public class CountToDimensionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int itemsCount = (int)value;
int dimensionLength = 1;
if (itemsCount > 0)
{
if (string.Equals((string)parameter, "Rows", StringComparison.OrdinalIgnoreCase))
{
switch(itemsCount)
{
case 1:
case 2: dimensionLength = 1;
break;
case 3:
case 4: dimensionLength = 2;
break;
}
}
if (string.Equals((string)parameter, "Columns", StringComparison.OrdinalIgnoreCase))
{
switch(itemsCount)
{
case 1: dimensionLength = 1;
break;
case 2:
case 3:
case 4: dimensionLength = 2;
break;
}
}
}
return dimensionLength;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
}
これは私のxamlです:
<customGridView:MyUniformGrid x:Name="AlarmButtonGrid" Margin="0,10" Grid.Row="2" Width="{Binding ActualWidth, ElementName=AlarmPictureBox}"
Rows="{Binding RelativeSource={RelativeSource Self}, Path=Children.Count, Converter={StaticResource CountToDimensionConverter}, ConverterParameter=Rows}"
Columns="{Binding RelativeSource={RelativeSource Self}, Path=Children.Count, Converter={StaticResource CountToDimensionConverter}, ConverterParameter=Columns}">
<Button x:Name="Button1" Content="Sluit" Height="35" Style="{StaticResource CustomButtonStyle}" Margin="5" />
<Button x:Name="Button2" Content="Verbergen" Height="35" Style="{StaticResource CustomButtonStyle}" Margin="5"/>
<Button x:Name="Button3" Visibility="Collapsed" Content="Extra rij" Height="35" Style="{StaticResource CustomButtonStyle}" Margin="5"/>
<Button x:Name="Button4" Visibility="Collapsed" Content="Extra rij" Height="35" Style="{StaticResource CustomButtonStyle}" Margin="5"/>
</customGridView:MyUniformGrid>
この投稿で、グリッドの Children.count が実際に機能するようにカスタムの UniformGrid を作成する必要があることがわかったので、それを行いました。
このコードはすべて機能しますが、1 つ問題が残っています。
これらのボタンは、動的に表示または折りたたむことができます。ボタンが折りたたまれたときに、行数に影響を与えたくありません。ボタン 3 と 4 が折りたたまれているときは、2 行目を表示したくありません。
これを達成する方法はありますか?