2

C# の WinForms で Infragistics UltraGrid を使用する:

グリッド上の一部の GroupByRows の ForeColor の色を条件付きで変更しています。ユーザーが行をクリックすると、別の色をクリックするまで、色はアクティブ/選択済み/ホット トラック/任意の色に戻ります。条件付きで色付けした行のテキストの色が変わらないようにしたいです。色を設定する方法は次のとおりです。

Row.Appearance.ForeColor = System.Drawing.Color.Orange;

行をクリックしても固定する方法はありますか?

ありがとう!

4

3 に答える 3

2

これは、描画フィルターを使用して説明の前の色を設定することで実行できます。これは常に適用されるためです。

簡単な例は、オレンジ色の整数値を持つ行ごとにすべてのグループを作成する次の描画フィルターです。

public class GroupByRowDrawFilter:IUIElementDrawFilter
{
    public bool DrawElement(DrawPhase drawPhase, ref UIElementDrawParams drawParams)
    {
        GroupByRowDescriptionUIElement element = (GroupByRowDescriptionUIElement)drawParams.Element;
        if (element.GroupByRow.Value is int)
        {
            int value = (int)element.GroupByRow.Value;
            if (value % 2 == 0)
            {
                drawParams.AppearanceData.ForeColor = Color.Orange;
            }
        }

        return false;
    }

    public DrawPhase GetPhasesToFilter(ref UIElementDrawParams drawParams)
    {
        if (drawParams.Element is GroupByRowDescriptionUIElement)
            return DrawPhase.BeforeDrawElement;
        return DrawPhase.None;
    }
}

描画フィルターを適用するには、次のコード行を使用します。

this.ultraGrid1.DrawFilter = new GroupByRowDrawFilter();

このアプローチでは、条件が描画フィルターにある必要があることに注意してください。これがうまくいかない場合は、現在 ForeColor を設定しているロジックを変更して、代わりに GroupByRow の Tag プロパティを設定し、描画フィルターの Tag プロパティをチェックして、ロジックを適用する必要があるかどうかを判断できます。

于 2012-07-08T20:25:08.927 に答える
0

私もあなたが変更する必要があると思います

grd.DisplayLayout.Override.SelectedRowAppearance.ForeColor = System.Drawning.Color.Orange;

以上

grd.DisplayLayout.Override.GroupByRowAppearance.ForeColor = System.Drawning.Color.Orange;

申し訳ありませんが、テストできるPCから離れています。

通常、これらのプロパティは、イベント引数内にLayoutオブジェクトを取得するInitializeLayoutイベントで効果的に変更できます。

e.Layout.Override.GroupByRowAppearance.ForeColor = Color.Orange;

編集:現時点で私が見つけた唯一の解決策は次のとおりです

    private void grd_BeforeRowActivate(object sender, RowEventArgs e)
    {
        // You need to add the additional logic required by you to
        // determine which rows need to have the forecolo changed...
        if (e.Row.IsGroupByRow == true)
            grd.DisplayLayout.Override.ActiveRowAppearance.ForeColor = Color.Orange;
        else
            grd.DisplayLayout.Override.ResetActiveRowAppearance();
    }
于 2012-06-21T16:40:13.003 に答える
0

インフラジスティックスは次のように述べています。

「GroupByRows のアクティブで選択された条件付き外観を持つ機能」は、新しい製品のアイデアであると判断されました。

于 2012-06-22T15:25:27.260 に答える