Почему я получаю ограничение правильности: ошибка спецификации уникального атрибута (0xc00cee3c) при переходе от LongListSelector

Я пытаюсь создать класс-потомок из набора инструментов Silverlight LongListSelector. Назовем его SimpleLonglistSelector. Я начал с «Silverlight for Windows Phone Toolkit Source & Sample — Feb 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

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


person McKay    schedule 30.07.2011    source источник
comment
Почему вы создаете новый подкласс, когда все, что вы, кажется, делаете, это меняете шаблоны данных? Вы можете изменять шаблоны без наследования.   -  person Matt Lacey    schedule 01.08.2011
comment
@Matt Lacey, среди прочего, мне нужен стандартный набор шаблонов данных, поэтому мне не нужно применять одни и те же шаблоны в нескольких разных местах, где я хочу использовать этот элемент управления. Уменьшите дублирование кода.   -  person McKay    schedule 03.08.2011
comment
Вы можете создавать именованные шаблоны в качестве ресурсов и повторно использовать их таким образом.   -  person Matt Lacey    schedule 04.08.2011
comment
@ Мэтт Лейси, да, но мне все еще нужно добавлять эти шаблоны (что, 6 из них необходимы для правильного функционирования этого элемента управления, но вы можете обойтись с 4?) каждый раз, и если они все собираются быть одинаковым, это все еще много дублирования. Это хорошая идея, и это лучше, чем переделывать весь контроль, но я бы хотел, чтобы эта версия работала.   -  person McKay    schedule 05.08.2011
comment
Поймите, что это не отвечает на вопрос, но для устранения некоторых дубликатов вместо того, чтобы шаблоны в качестве отдельных ресурсов объявляли стиль, который устанавливает все шесть шаблонов. Затем все, что вам нужно сделать, это установить свойство стиля один раз для каждого длинного списка.   -  person Nigel Sampson    schedule 10.10.2011
comment
@ Найджел Сэмпсон Думаю, это то, что я ищу на самом деле. Я должен попробовать, я, вероятно, могу поместить уникальный код в метод расширения, если мне только нужно сказать «эй, вот стиль, и он делает то, что я хочу, это, вероятно, сработает». Напишите это как ответ, если вы хотите, чтобы это было признано, и мы посмотрим. Да, это не решает вопроса. Но на данный момент (2 1/2 месяца и награда) похоже, что никто на самом деле не знает, что здесь происходит.   -  person McKay    schedule 10.10.2011
comment
Просто из любопытства, если у вас нет внешнего вложенного элемента Border, вы все еще получаете эту ошибку?   -  person AakashM    schedule 10.10.2011
comment
@AakashM удаление внешних вложенных граничных элементов ничего не меняет :( Хорошая идея.   -  person McKay    schedule 13.10.2011
comment
Я только что попробовал ваш образец здесь, следуя вашим инструкциям, но используя набор инструментов 7.1 от silverlight.codeplex.com /releases/view/71550, и это сработало как чемпион. Интересно, а просто где-то в версии 7.0 баг?   -  person Chris Koenig    schedule 18.10.2011
comment
@Chris Koenig О, я еще не попробовал это на 7.1. Это хорошая теория.   -  person McKay    schedule 19.10.2011
comment
Мое предложение сработало для вас? Я так и не услышал ответ...   -  person Chris Koenig    schedule 31.10.2011
comment
Планирую проверить, но я еще не перешел на 7.1 в этом проекте. Хотя планирую проверить.   -  person McKay    schedule 31.10.2011


Ответы (1)


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

person Chris Koenig    schedule 30.01.2012