コード例を用いて、条件付き書式を xamOrgChart™ ノードへ適用する方法に関する詳細手順を説明します
この題材を理解するのにあらかじめ必要となるトピック。
条件付き書式は、ノード レイアウト内の個々のノードまたはノード グループの外観をカスタマイズするカスタマイズの 1 つの方法です。ノードの外観には、スタイル、色、フォント ファミリーおよびサイズ、ノードの前景または背景などが含まれます。
たとえば、データ値に基づいて条件付き書式をアプリケーションに定義しているとします。データ値が指定された条件を満たしている場合、ゼロを下回っている「勘定残高」は 赤色のイタリック体 でノードのテキストを表示するとします。勘定残高がゼロを下回るたびに、 xamOrgChart は条件付き書式にしたがってノードを描画します。この場合は、 赤色のイタリック体 です。
条件付き書式はオプション機能であるため、条件が指定されていない場合、適用される書式およびスタイルは、コントロールのすべてのノードに適用されます。条件付き書式を使って作業をする場合、スタイルは XAML で作成してリソースとして参照できますが、基本の条件付きロジックは、C# または Visual Basic を使用したコード内でのみ実行できることに留意することが重要です。これは、 xamOrgChart コントロール内のコードは OrgChartNode オブジェクトによって表され、これはコード (C# または Visual Basic) 内で参照できますが、XAML では参照できないためです。その結果、条件付き書式はコード内でのみ実現できます。
xamOrgChart コントロールは XAML のノード オブジェクトを公開しないため、すべての条件付き書式は C# コードまたは Visual Basic コードで実装する必要があります。
以下はプロセスの概念的概要です。
1. 条件付き書式にスタイルを定義します
2. NodeControlAttachedEvent を処理することによる条件の確認と書式の適用
以下の例は、従業員データベース内の特定の従業員に条件付き書式を適用する方法を示しています。これによって xamOrgChart レイアウトでその従業員が強調されます。
この例では、XAML を使って、特定の書式の前景、背景、およびフォント サイズ プロパティを持つ基本スタイルを作成しています。ここでは条件付きロジックを設定して、従業員データベースから個々の従業員を名前で特定し、XAML で定義されたスタイルを適用しています。これは、C# または Visual Basic を使用したコードのみ実装できます。
ここでは、条件付き書式がツリー内のサブ ノードにどのように適用されているかを見ることができます (この場合は Rob)。
この手順を行うには、以下の作業を行う必要があります。
Window (WPF) または UserControl (Silverlight) が追加された、WPF または Silverlight プロジェクト
ページに追加された xamOrgChart コントロールコントロールをデータに追加およびバインドする方法については、 xamOrgChart をアプリケーションに追加を参照してください。
このトピックでは、条件付き書式のプロセスをステップごとに説明します。以下はプロセスの概念的概要です。
1. 条件付き書式にスタイルを定義します
2. NodeControlAttachedEvent を処理することによる条件の確認と書式の適用
条件付き書式をアプリケーションに簡単に適用するには、これらの手順を順番に実行します。
XAML の条件付き書式のスタイルを以下のように定義します。
XAML の場合:
<Style x:Key="EmployeeNodeStyle"
TargetType="ig:OrgChartNodeControl">
<Setter Property="Background" Value="#FFB0C4DE"/>
<Setter Property="Foreground" Value="#FF696969" />
<Setter Property="FontSize" Value="18" />
</Style>
コード ビハインドでは、条件付き書式の以下のコードを追加します。
コードは、次のステップを実行します。
データを読み出し、検証します。
オブジェクト型が正しい型であることを確認します。
前に作成された XAML 書式スタイルを適用します。
C# の場合:
private void XamOrgChart_NodeControlAttachedEvent(object sender, Infragistics.Controls.Maps.OrgChartNodeEventArgs e)
{
var nodeModel = e.Node.DataContext;
if (nodeModel == null)
return;
if (nodeModel.GetType() == typeof(Employee))
{
Employee emp = nodeModel as Employee;
if (emp == null)
return;
if ((string)emp.FirstName == "Rob")
{
e.Node.Style = this.Resources["EmployeeNodeStyle"] as Style;
}
}
}
Visual Basic の場合:
Private Sub XamOrgChart_NodeControlAttachedEvent(sender As Object, e As Infragistics.Controls.Maps.OrgChartNodeEventArgs)
Dim nodeModel = e.Node.DataContext
If nodeModel Is Nothing Then
Return
End If
If nodeModel.[GetType]() = GetType(Employee) Then
Dim emp As Employee = TryCast(nodeModel, Employee)
If emp Is Nothing Then
Return
End If
If DirectCast(emp.FirstName, String) = "Rob" Then
e.Node.Style = TryCast(Me.Resources("EmployeeNodeStyle"), Style)
End If
End If
End Sub