バージョン

PropertyNamePersistenceInfo TypeConverter プロパティの使用

一部のプロパティは Infragistics Control Persistence Framework で保持できません。

このようなプロパティは Cursor、FontWeight、FontFamily および FontStyle です。

TypeConverter を使用してこのようなプロパティを保存できます。

この例は、FontFamily プロパティを保存およびロードできる方法を示します。2 つの xamComboEditor コンポーネントを使用して、最初のコンポーネントのフォント設定を 2 番目のコンポーネントに適用します。

  1. 最初に、FontFamily プロパティのコンバーター クラスを作成します。

Visual Basic の場合:

Public Class FontFamilyConverter
    Inherits TypeConverter
    Public Overloads Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean
        Return (sourceType Is GetType(String))
    End Function
    Public Overloads Overrides Function CanConvertTo(ByVal context As ITypeDescriptorContext, ByVal destinationType As Type) As Boolean
        Return (destinationType Is GetType(String))
    End Function
    Public Overloads Overrides Function ConvertFrom(ByVal context As ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object
        Dim obj As String = DirectCast(value, String)
        If obj IsNot Nothing AndAlso obj.Length > 0 Then
            Return New FontFamily(obj)
        Else
            Return New FontFamily("Verdana")
        End If
    End Function
    Public Overloads Overrides Function ConvertTo(ByVal context As ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As Type) As Object
        If value IsNot Nothing Then
            Dim ff As FontFamily = DirectCast(value, FontFamily)
            Return ff.ToString()
        End If
        Return Nothing
    End Function
End Class

C# の場合:

public class FontFamilyConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return (sourceType == typeof(string));
    }
    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        return (destinationType == typeof(string));
    }
    public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
    {
        string obj = (string)value;
        if (obj != null && obj.Length > 0)
            return new FontFamily(obj);
        else
            return new FontFamily("Verdana");
    }
    public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
    {
        if (value != null)
        {
            FontFamily ff = (FontFamily)value;
            return ff.ToString();
        }
        return null;
    }
}
  1. UserControl リソースで作成したコンバーターを静的リソースとして追加します。

XAML の場合:

<UserControl.Resources>
    <local:FontFamilyConverter x:Key="FontConverter" />
</UserControl.Resources>
  1. 最初の xamComboEditor コントロールを追加します。

XAML の場合:

<ig:XamComboEditor x:Name="XWComboEditorBase"
         IsEditable="True" Height="30" Width="300"
         DisplayMemberPath="FirstName"  FontFamily="Arial">
  <TextBox x:Name="txtBoxSource" Width="300" FontFamily="Arial">
   <ig:PersistenceManager.Settings>
      <ig:PersistenceSettings SavePersistenceOptions="OnlySpecified">
         <ig:PersistenceSettings.PropertySettings>
            <ig:PropertyNamePersistenceInfo
				PropertyName="FontFamily"
				TypeConverter="{StaticResource FontConverter}" />
		 </ig:PersistenceSettings.PropertySettings>
      </ig:PersistenceSettings>
    </ig:PersistenceManager.Settings>
   </TextBox>
</ig:XamComboEditor>
  1. xamComboEditor の FontFamily を "Arial" に設定し、この設定をターゲットの xamComboEditor に適用します。

  2. このプロパティは保存される唯一のプロパティです。TypeConverter プロパティを静的なリソース FontConverter にバインドします。

  3. 2 番目の xamComboEditor と 2 つのボタンを追加して、保存およびロード プロセスを実行します。

XAML の場合:

<ig:XamComboEditor x:Name="XWComboEditorTarget"
    IsEditable="True" Height="30" Width="100"
    DisplayMemberPath="FirstName" />
<Button x:Name="save" Content="save" Click="save_Click" Width="100" />
<Button x:Name="load" Content="load" Click="load_Click" Width="100" />
  1. ボタンの Click イベントを処理します。

Visual Basic の場合:

Private ms As New MemoryStream()
Private Sub save_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ms = PersistenceManager.Save(XWComboEditorBase)
End Sub
Private Sub load_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ms.Position = 0
    PersistenceManager.Load(XWComboEditorTarget, ms)
  End Sub

C# の場合:

private MemoryStream ms = new MemoryStream();
private void save_Click(object sender, RoutedEventArgs e)
{
    ms = PersistenceManager.Save(XWComboEditorBase);
}
private void load_Click(object sender, RoutedEventArgs e)
{
    ms.Position = 0;
    PersistenceManager.Load(XWComboEditorTarget, ms);
  }
  1. 結果は、FontFamily プロパティがターゲットの xamComboEditor から適用されることになります。