ContentControl.ContentTemplateSelector プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
アプリケーション作成者がテンプレートを選択するためのカスタム ロジックを提供できるようにするテンプレート セレクターを取得または設定します。
public:
property System::Windows::Controls::DataTemplateSelector ^ ContentTemplateSelector { System::Windows::Controls::DataTemplateSelector ^ get(); void set(System::Windows::Controls::DataTemplateSelector ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Controls.DataTemplateSelector ContentTemplateSelector { get; set; }
[<System.ComponentModel.Bindable(true)>]
member this.ContentTemplateSelector : System.Windows.Controls.DataTemplateSelector with get, set
Public Property ContentTemplateSelector As DataTemplateSelector
プロパティ値
データ テンプレート セレクター。 既定値は null
です。
- 属性
例
ContentTemplateSelector プロパティを使用する方法を次の例に示します。 次の使用例は、 でComboBox選択した項目を からContent継承ContentControlする の Labelプロパティにバインドします。 ユーザーが 5 未満の値を選択すると、選択した項目の値が の黒い四角形に Label表示されます。 ユーザーが 5 以上の値を選択すると、値は緑色の省略記号で表示されます。 この例では、2 つの DataTemplate オブジェクトと DataTemplateSelectorを作成することでこれを実現します。これは、 プロパティに ContentTemplateSelector 設定され、選択した項目の値に基づいて適切な DataTemplate を選択します。
<Window.Resources>
<!--Create two DataTemplate objects to be
selected by the DataTemplateSelector.-->
<DataTemplate x:Key="numberTemplate">
<Grid>
<Rectangle Stroke="Black" />
<TextBlock Margin="5" Text="{Binding}" FontSize="18"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="largeNumberTemplate">
<Grid>
<Ellipse Stroke="Green" StrokeThickness="4"/>
<TextBlock Margin="10" Text="{Binding}" FontSize="24"
Foreground="Red" FontWeight="Bold" />
</Grid>
</DataTemplate>
<local:NumberDataTemplateSelector x:Key="numberTemplateSelector"
NumberTemplate="{StaticResource numberTemplate}"
LargeNumberTemplate="{StaticResource largeNumberTemplate}"/>
</Window.Resources>
<StackPanel>
<!--Bind the content of the Label to the selected item
in the ComboBox.-->
<Label Foreground="Black"
Content="{Binding ElementName=numberList, Path=SelectedItem.Content}"
ContentTemplateSelector="{StaticResource numberTemplateSelector}">
</Label>
<ComboBox Name="numberList">
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
<ComboBoxItem>4</ComboBoxItem>
<ComboBoxItem>5</ComboBoxItem>
<ComboBoxItem>6</ComboBoxItem>
<ComboBoxItem IsSelected="True">7</ComboBoxItem>
<ComboBoxItem>8</ComboBoxItem>
<ComboBoxItem>9</ComboBoxItem>
<ComboBoxItem>10</ComboBoxItem>
</ComboBox>
</StackPanel>
public class NumberDataTemplateSelector : DataTemplateSelector
{
public DataTemplate NumberTemplate { get; set; }
public DataTemplate LargeNumberTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
// Null value can be passed by IDE designer
if (item == null) return null;
var num = Convert.ToInt32((string)item);
// Select one of the DataTemplate objects, based on the
// value of the selected item in the ComboBox.
if (num < 5)
{
return NumberTemplate;
}
else
{
return LargeNumberTemplate;
}
}
}
Public Class NumberDataTemplateSelector
Inherits DataTemplateSelector
Public Property NumberTemplate As DataTemplate
Public Property LargeNumberTemplate As DataTemplate
Public Overrides Function SelectTemplate(ByVal item As Object, _
ByVal container As DependencyObject) As DataTemplate
' Nothing can be passed by IDE designer
if (item Is Nothing) Then
Return Nothing
End If
Dim num = Convert.ToInt32(CStr(item))
' Select one of the DataTemplate objects, based on the
' value of the selected item in the ComboBox.
If num < 5 Then
Return NumberTemplate
Else
Return LargeNumberTemplate
End If
End Function 'SelectTemplate
End Class
注釈
通常は、同じ種類のオブジェクトに複数DataTemplateの オブジェクトがあり、各データ オブジェクトのプロパティに基づいて 適用する をDataTemplate選択する独自のロジックを指定する場合に を作成DataTemplateSelectorします。 異なる型のオブジェクトがある場合は、 で プロパティを DataType 設定できることに DataTemplate注意してください。 これを行う場合は、 を作成 DataTemplateSelectorする必要はありません。 さらに、同じ型のオブジェクトがあり、プロパティが異なる場合は、 または データ コンバーターの DataTrigger 使用も検討できます。 詳細については、「 データ テンプレートの概要」を参照してください。
テンプレート セレクターを作成するには、 を継承 DataTemplateSelector するクラスを作成し、 メソッドをオーバーライドします SelectTemplate 。 クラスが定義されたら、クラスのインスタンスを要素のテンプレート セレクター プロパティに割り当てることができます。
プロパティと プロパティの両方 ContentTemplateSelector が ContentTemplate 設定されている場合、このプロパティは無視されます。
XAML 属性の使用方法
<object ContentTemplateSelector="{ResourceExtension TemplateSelectorKey}"/>
XAML 値
ResourceExtension
または のいずれかのテンプレート リソースStaticResource
DynamicResource
を参照する方法を識別するマークアップ拡張機能。
「XAML リソース」を参照してください。
TemplateSelectorKey
要求されたテンプレート セレクターを識別するキー。 キーは、 内の既存のリソースを ResourceDictionary参照します。
依存プロパティ情報
識別子フィールド | ContentTemplateSelectorProperty |
に設定されたメタデータ プロパティ true |
なし |
適用対象
.NET