Frage

Ich entwickle ein benutzerdefiniertes Steuerelement, das von einer ListBox abstammt.Als Teil meiner Steuerung möchte ich einen Standard-ItemTemplateSelector bereitstellen.Leider kann ich nicht sehen, wie ich meinen DataTemplateSelector finde.Hier ist der Code mit irrelevanten Details:

public class AnnotationTemplateSelector : DataTemplateSelector
{
    public DataTemplate BoxValuePairTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        return BoxValuePairTemplate;
    }
}

Und der Xaml ...

    <DataTemplate x:Key="BoxValuePairDataTemplate">
        <Grid TextBlock.FontSize="9" Height="13" Width="{Binding Path=Width}" SnapsToDevicePixels="False">
     ... etc...
        </Grid>                                  
     </DataTemplate>

Der Selektor:

    <Annotations:AnnotationTemplateSelector BoxValuePairTemplate="{StaticResource BoxValuePairDataTemplate}"
                                            x:Key="AnnotationTemplateSelector" />

Der Stil:

    <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>

Leider ist der ItemTemplateSelector nach dem Anwenden der Vorlage immer null und es werden keine Bindungsfehler angezeigt.

Ideen?

War es hilfreich?

Lösung

Es stellt sich heraus, dass ich eine Bindung in der Contentspressesents fehlte.Ich gebe meine Antwort jetzt in der Hoffnung, dass es verhindern wird, dass Frustration in der Zukunft denselben Fehler machen könnte: generasacodicetagpre.

Ich fehlte in der ContentTemplateLector-Bindung im ContentPresenter, so dass es offensichtlich nie aufgerufen wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top