バージョン

プロパティ値のリセット (xamPropertyGrid)

トピックの概要

目的

このトピックでは、プロパティの既定値を定義する方法と、オプション メニューをカスタマイズする方法を説明します。

前提条件

このトピックをより理解するために、以下のトピックを参照することをお勧めします。

トピック 目的

このトピックでは、このコントロールでサポートする機能を開発者の観点から説明します。

このトピックでは、コントロールの視覚要素についての概要を紹介します。

このトピックでは、 xamPropertyGrid を短時間で起動、実行するために役立つ詳細な操作方法を紹介します。

プロパティ値のリセットの概要

プロパティ値のリセットの概要

xamPropertyGrid コントロールのプロパティ値のリセット機能では、既定値が定義されている場合、ユーザーは各プロパティを既定値とは独立させリセットすることができます。各プロパティの値の右側には、小さなグリフがあります。以下のスクリーンショットは、リセット値のグリフの状態を示しています。

xamPropertyGrid 07.png

中抜きの四角

プロパティ値はリセットできません (現在の値が既定値、またはプロパティに既定値が定義されていない)。

塗りつぶされた四角

現在のプロパティ値はリセットできます。

注:

Note

マウスをグリフの上に置くと、ツールチップが表示されます。中抜きの四角として描画されるグリフの場合、「既定値」がツールチップのテキストとして表示されます。塗りつぶされた四角として描画されるグリフの場合、「ローカル 」 (つまり、既定値以外のローカルな値が設定されています) がツールチップのテキストとして表示されます。

リセット グリフをクリックすると、オプション メニューが表示されます。既定では、このメニューにプロパティ値をリセットするためのオプションが 1 つのみ存在します。ただし、 xamPropertyGridOptionsMenu プロパティを任意の ContextMenu に設定すると、カスタム オプション メニューを指定できます。カスタムな ContextMenuDataContext は、現在のプロパティに関連付けられた PropertyGridPropertyItem に自動的に設定されます。

以下のスクリーンショットは、「塗りつぶされた四角」のリセット プロパティ値のグリフをクリックしたときに表示される既定のオプションのメニューを示しています。

xamPropertyGrid 08.png

プロパティの既定値の定義の概要

プロパティの既定値の定義の概要表

以下の表では、プロパティの既定値を定義する方法を簡単に説明しています。詳細は、表の後に記載されています。

構成可能な項目 詳細

「DefaultValue」属性を使用したプロパティの既定値の定義

メソッドを使用したプロパティの既定値の定義

属性を使用したプロパティの既定値の定義

概要

「DefaultValue」属性を使用して、プロパティの既定値をコードで定義することができます。

以下のコードは、「DefaultValue」属性を使用して、プロパティの既定値を定義する方法を示します。

C# の場合:

public class Person
{
  [DefaultValue("first-name-default-value")]
  public string FirstName { get; set; }
  …
  }

Visual Basic の場合:

Public Class Person
  <DefaultValue("first-name-default-value")> _
  Public Property FirstName() As String
    Get
      Return m_FirstName
    End Get
    Set
      m_FirstName = Value
    End Set
  End Property
  Private m_FirstName As String
End Class

メソッドを使用したプロパティの既定値の定義

概要

プロパティに「DefaultValue」属性で表すことができない既定値がある場合は、Reset と ShouldSerialize を使用してプロパティの既定値をコードで設定することができます。

  1. プレフィックスが「Reset」で戻り型が void のプロパティと同じ名前にリセットする各プロパティに対して、reset メソッドを定義します。このメソッドを使用して、プロパティの値を既定値に設定します。

  2. プレフィックスが「ShouldSerialize」で戻り型が bool のプロパティと同じ名前にリセットする各プロパティに対して、ShoudSerialize メソッドを定義します。このメソッドは、プロパティ値がリセットできる場合、true を返します。

以下のコードは、メソッドを使用してプロパティの既定値を定義する方法を示します。

C# の場合:

public class Person : INotifyPropertyChanged
{
  private string firstNameDefault = "first-name-default-value";
  public string FirstName { get; set; }
  public void ResetFirstName()
  {
    this.FirstName = this.firstNameDefault;
    this.PropertyChange("FirstName");
  }
  public bool ShouldSerializeFirstName()
  {
    return !this.firstNameDefault.Equals(this.FirstName);
  }
  …
  public event PropertyChangedEventHandler PropertyChanged;
  private void PropertyChange(string propertyName)
  {
    if (this.PropertyChanged != null)
    {
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

Visual Basic の場合:

Public Class Person Implements INotifyPropertyChanged
 Private firstNameDefault As String = "first-name-default-value"
  Public Property FirstName() As String
    Get
      Return m_FirstName
    End Get
    Set
      m_FirstName = Value
    End Set
  End Property
  Private m_FirstName As String
  Public Sub ResetFirstName()
    Me.FirstName = Me.firstNameDefault
    Me.PropertyChange("FirstName")
  End Sub
  Public Function ShouldSerializeFirstName() As Boolean
    Return Not Me.firstNameDefault.Equals(Me.FirstName)
  End Function
  …
  Public Event PropertyChanged As PropertyChangedEventHandler
  Private Sub PropertyChange(propertyName As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
  End Sub
End Class

オプション メニューのカスタマイズ

概要

既定のオプション メニューは、各プロパティ値の右側にあるグリフをクリックすると表示されます。このメニューのオプションは、「リセット」 (プロパティを既定値にリセット) のみです。xamPropertyGridOptionsMenu プロパティを変更すると、このメニューをカスタマイズできます。ContextMenu 型の新しいインスタンスを設定することもできます。カスタムな ContextMenu の DataContext は、現在のプロパティに関連付けられた PropertyGridPropertyItem に自動的に設定されます。

以下のコード例は、既定の「リセット」オプションを使用してオプション メニューを定義する方法を示します。また、現在のプロパティ名とプロパティ値を表示する複数のオプションも示します。

XAML の場合:

<ig:XamPropertyGrid x:Name="xamPropertyGrid1">
  <ig:XamPropertyGrid.OptionsMenu>
	<ContextMenu>
      <MenuItem Header="Custom Reset Value">
        <ig:Commanding.Command>
          <igPrim:PropertyGridPropertyItemCommandSource
          EventName="Click"
          CommandType="ResetPropertyValue"
          ParameterBinding="{Binding}" />
        </ig:Commanding.Command>
      </MenuItem>
      <MenuItem Header="Obtain Property Name" Click="MenuItemName_Click" />
      <MenuItem Header="Obtain Property Value" Click="MenuItemValue_Click" />
    </ContextMenu>
  </ig:XamPropertyGrid.OptionsMenu>
</ig:XamPropertyGrid>

C# の場合:

private void MenuItemName_Click(object sender, RoutedEventArgs e)
{
  MenuItem mi = sender as MenuItem;
  PropertyGridPropertyItem pgpi = mi.DataContext as PropertyGridPropertyItem;
  MessageBox.Show(pgpi.PropertyName, "Property Name");
}
private void MenuItemValue_Click(object sender, RoutedEventArgs e)
{
  MenuItem mi = sender as MenuItem;
  PropertyGridPropertyItem pgpi = mi.DataContext as PropertyGridPropertyItem;
  MessageBox.Show(pgpi.Value.ToString(), "Property Value");
}

Visual Basic の場合:

Private Sub MenuItemName_Click(sender As Object, e As RoutedEventArgs)
  Dim mi As MenuItem = TryCast(sender, MenuItem)
  Dim pgpi As PropertyGridPropertyItem = TryCast(mi.DataContext, PropertyGridPropertyItem)
  MessageBox.Show(pgpi.PropertyName, "Property Name")
End Sub
Private Sub MenuItemValue_Click(sender As Object, e As RoutedEventArgs)
  Dim mi As MenuItem = TryCast(sender, MenuItem)
  Dim pgpi As PropertyGridPropertyItem = TryCast(mi.DataContext, PropertyGridPropertyItem)
  MessageBox.Show(pgpi.Value.ToString(), "Property Value")
End Sub

関連コンテンツ

トピック

このトピックの追加情報については、以下のトピックも合わせてご参照ください。

トピック 目的

このトピックでは、コントロールが展開可能なプロパティを識別し表示する方法を説明します。

このトピックでは、コントロールが選択されたオブジェクトのプロパティを検出する方法、プロパティ項目のリストを作成する方法、およびプロセスを構成しカスタマイズする方法を説明します。

このトピックでは、コマンドによりコントロールを使用してさまざまな操作を実行する方法を説明します。