Почему я получаю сообщение об ошибке «ограничение правильной формы: спецификация уникального атрибута» (0xc00cee3c) при выходе из LongListSelector - PullRequest
14 голосов
/ 30 июля 2011

Я пытаюсь создать класс-потомок из набора инструментов Silverlight LongListSelector. Давайте назовем это SimpleLonglistSelector. Я начал с «Источника и образца набора инструментов Silverlight для Windows Phone - февраль 2011.zip»

http://silverlight.codeplex.com/releases/view/60291

Я создал новый класс:

public class SimpleLongListSelector : LongListSelector
{
    public SimpleLongListSelector()
    {
        var itemsPanelTemplate = @"
            <ItemsPanelTemplate xmlns='http://schemas.microsoft.com/client/2007'>
                <toolkit:WrapPanel xmlns:toolkit='clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit' Orientation=""Horizontal""/>
            </ItemsPanelTemplate>";

        this.GroupItemsPanel = (ItemsPanelTemplate)XamlReader.Load(itemsPanelTemplate);

        var groupItemTemplate = @"
            <DataTemplate xmlns='http://schemas.microsoft.com/client/2007'>
                <Border Width=""99"" Height=""99"" Background=""{StaticResource PhoneAccentBrush}"" Margin=""6"" IsHitTestVisible=""{Binding HasItems}"">
                    <TextBlock Text=""{Binding Key}"" 
                                           FontFamily=""{StaticResource PhoneFontFamilySemiBold}""
                                           FontSize=""36""
                                           Margin=""{StaticResource PhoneTouchTargetOverhang}""
                                           Foreground=""{StaticResource PhoneForegroundBrush}""                                        
                                           VerticalAlignment=""Bottom""/>
                </Border>
            </DataTemplate>";

        this.GroupItemTemplate = (DataTemplate)XamlReader.Load(groupItemTemplate);

        var groupHeaderTemplate = @"
            <DataTemplate xmlns='http://schemas.microsoft.com/client/2007'>
                <Border Background=""Transparent"">
                    <Border Background=""{StaticResource PhoneAccentBrush}"" Width=""75"" Height=""75"" HorizontalAlignment=""Left"">
                        <TextBlock Text=""{Binding Path=Key}"" 
                                               Foreground=""{StaticResource PhoneForegroundBrush}"" 
                                               Style=""{StaticResource PhoneTextExtraLargeStyle}""
                                               VerticalAlignment=""Bottom""/>
                    </Border>
                </Border>
            </DataTemplate>";

        this.GroupHeaderTemplate = (DataTemplate)XamlReader.Load(groupHeaderTemplate);

        var itemTemplate = @"
            <DataTemplate xmlns='http://schemas.microsoft.com/client/2007'>
                <TextBlock Text=""{Binding Title}"" FontSize=""30""/>
            </DataTemplate>";

        this.ItemTemplate = (DataTemplate)XamlReader.Load(itemTemplate);
    }
}

Затем я добавил его в пример LongListSelector, в том же центре, что и все остальные селекторы длинного списка:

            <controls:PivotItem Header="SLLS">
                <local:SimpleLongListSelector x:Name="simple" />
            </controls:PivotItem>

Затем я добавил, что его источник совпадает с источником фильмов в LoadLinqMovies ()

        simple.ItemsSource = moviesByCategory;

Затем запустите код (я знаю, что он не выглядит красиво, потому что привязки не были установлены правильно, я делаю это, чтобы вы знали, что это не данные. Если вы хотите, вы можете сделать это как это:

        simple.ItemsSource = movies.GroupBy((m) => m.Title[0]).Select((c) => new PublicGrouping<char, Movie>(c));

Похоже, я хочу, чтобы это выглядело.

Ну, в любом случае, это работает как положено, кроме случаев, когда я нажимаю на заголовок группы. (любой из [по умолчанию синих] квадратов). Я получаю

WrappedException

Сообщение об ошибке:

0xc00cee3c

Что, я думаю, означает:

well-formedness constraint: unique attribute spec

Не думаю, что у меня проблема с уникальностью. Что я делаю не так?

1 Ответ

1 голос
/ 30 января 2012

Если вы используете LongListSelector из набора инструментов 7.1, который находится по адресу http://silverlight.codeplex.com/releases/view/71550,, ваш пример кода работает так, как указано выше. Это должно быть какая-то ошибка в оригинальном LLS ...

...