2
ListBoxから継承するカスタムコントロールを開発しています。私のコントロールの一環として、デフォルトのItemTemplateSelectorを提供したいと思います。残念ながら、私はそれが私のDataTemplateSelectorを見つけることがわかりません。無関係な詳細は省略さでここでのコードは、次のとおりです。DataTemplateSelectorをカスタムコントロールスタイルに適用する
public class AnnotationTemplateSelector : DataTemplateSelector
{
public DataTemplate BoxValuePairTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
return BoxValuePairTemplate;
}
}
とXAML ...
<DataTemplate x:Key="BoxValuePairDataTemplate">
<Grid TextBlock.FontSize="9" Height="13" Width="{Binding Path=Width}" SnapsToDevicePixels="False">
... etc...
</Grid>
</DataTemplate>
セレクター:
<Annotations:AnnotationTemplateSelector BoxValuePairTemplate="{StaticResource BoxValuePairDataTemplate}"
x:Key="AnnotationTemplateSelector" />
スタイル:
<Style TargetType="{x:Type Annotations:BoxEditorSurface}">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="ItemTemplateSelector" Value="{StaticResource AnnotationTemplateSelector}"/>
... etc ...
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Canvas.Left" Value="{Binding Path=X, Mode=TwoWay}" />
<Setter Property="Canvas.Top" Value="{Binding Path=Y, Mode=TwoWay}" />
<Setter Property="Padding" Value="0" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</Setter.Value>
</Setter>
</Style>
残念ながら、テンプレートが適用された後、ItemTempl ateSelectorは常にnullであり、バインディングエラーは表示されません。
アイデア?
"AnnotationTemplateSelector"ではなく "annotationTemplateSelector"というキーが誤植であると思われますか?そうでなければ例外が発生します... – Jens
はい、それはタイプミスです。問題は、いくつかの細部の詳細にあることが判明しました。私は今アップデートを投稿しています。 –
あなたのスタイルは適用されていますか?セレクタがスタイルの「上」に定義されていますか?何らかの理由でItemTemplateが設定されていました。これは、ItemTemplateが見つかったときにセレクタが無視される(おそらくゼロになる)ためです。 – dowhilefor