xamDataGrid の列幅(カラム幅)の変更を検出する方法をいくつかご紹介します。

  1. LabelPresenter の SizeChanged イベントで検出する。
  2. Field の PropertyChanged イベントで検出する。

それぞれ見ていきましょう。

LabelPresenter の SizeChanged イベントで検出する方法

以下の実装例にしたがってお試しください。

XAML の実装例
<Grid>
    <Grid.Resources>
        <Style TargetType="{x:Type igDP:LabelPresenter}">
            <EventSetter Event="SizeChanged" Handler="LabelPresenter_SizeChanged"/> 👈Style の EventSetter にて定義しています。
        </Style>
    </Grid.Resources>
    <igDP:XamDataGrid Name="xamDataGrid1"/>
</Grid>
コード の実装例

public partial class MainWindow : Window
{
    ...
    // ウィンドウが完全にロードされたことを示すフラグを設定
    private bool _isLoaded = false;
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _isLoaded = true;
    }
    private void LabelPresenter_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        // アプリケーション起動時の実行を無視し、ウィンドウがロードされた後にのみ処理
        if (_isLoaded)
        {
            MessageBox.Show("カラムがサイズ変更されました。");
        }
    }
}

コード側では、アプリ初回起動時にも発生する際にメッセージが出ないように分岐を入れています。

Field の PropertyChanged イベントで検出する方法

以下の実装例にしたがってお試しください。

今回は Loaded イベントで各 Field の PropertyChanged イベントに処理を割り当てています。

<Grid>
    <igDP:XamDataGrid Name="xamDataGrid1" Loaded="xamDataGrid1_Loaded"/>
</Grid>
private void xamDataGrid1_Loaded(object sender, RoutedEventArgs e)
{
    var dataGrid = sender as XamDataGrid;
    if (dataGrid != null)
    {
        // 全てのフィールドに対してPropertyChangedイベントを設定
        foreach (var fieldLayout in dataGrid.FieldLayouts)
        {
            foreach (var field in fieldLayout.Fields)
            {
                field.PropertyChanged += OnFieldPropertyChanged;
            }
        }
    }
}
private void OnFieldPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
    Debug.WriteLine("PropertyChanged");
    if (e.PropertyName != null && e.PropertyName.Contains("LabelWidth"))
    {
        Debug.WriteLine("LabelWidthResolved");
    }
    else if (e.PropertyName != null && e.PropertyName.Contains("CellWidth"))
    {
        Debug.WriteLine("CellWidthResolved");
    }
}

列幅を調整した場合、PropertyChanged イベントでは PropertyChangedEventArgs の PropertyName に以下のいづれかの値が設定されてきますので、そちらを判定し検知してください。

  • LabelWidthResolved
  • CellWidthResolved
Tagged:

製品について

Ultimate UI for WPF