Создание нескольких пользовательских элементов управления в WP7 Silverlight дает странные исключения - PullRequest
2 голосов
/ 04 июня 2011

Я следовал руководству, чтобы создать пользовательский элемент управления.В основном я сделал новый проект, добавил файл CategoryBar.cs и каталог с именем Themes с файлом Themes\generic.xaml (с типом компиляции, установленным в 'resource').Затем я написал класс CategoryBar.cs, заполнив generic.xaml ResourceDictionary.Давайте назовем этот проект «UILib»:

<?xml version="1.0" encoding="utf-8" ?> 
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
                xmlns:local="clr-namespace:ErnestUILib">
    <Style TargetType="local:CategoryBar">
        <Setter Property="Background" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:CategoryBar">
                        <Grid x:Name="GridView" Background="{TemplateBinding Background}" Margin="0,0,0,8">
                            <!-- The grid rowdefs, coldefs and whatever makes up the grid -->
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

И все это прекрасно работает в проекте, где я добавляю ссылку на эту библиотеку.Я добавил атрибут xmlns:EULib="clr-namespace:UILib;assembly=UILib" к <phone:PhoneApplicationPage .. />, и он работает нормально.Теперь я хотел реализовать другой элемент управления (так как я хочу иметь одну отдельную и ровно одну библиотеку для пользовательских элементов управления пользовательского интерфейса).Итак, теперь мой generic.xaml выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?> 
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
                xmlns:local="clr-namespace:ErnestUILib">
    <!-- THE NEW CUSTOM CONTROL -->
    <Style TargetType="local:PaginationBar">
        <Setter Property="Background" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:PaginationBar">
                        <Grid x:Name="GridView" Background="{TemplateBinding Background}" Margin="0,0,0,8">
                            <!-- The grid rowdefs, coldefs and whatever makes up the grid -->
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


    <!-- THE PREVIOUS CUSTOM CONTROL -->
    <Style TargetType="local:CategoryBar">
        <Setter Property="Background" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:CategoryBar">
                        <Grid x:Name="GridView" Background="{TemplateBinding Background}" Margin="0,0,0,8">
                            <!-- The grid rowdefs, coldefs and whatever makes up the grid -->
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

Здесь я создал класс PaginationBar в PaginationBar.cs, и все это настроено, но когда я пытаюсь использовать его в файле xaml моего приложения, он показывает заполненный белым прямоугольник в представлении конструктора с крестиком в его верхнем левом углу и говорит, что исключение вызвано Control_TargetTypeMismatch.После нескольких моих хитростей ничего не работало, но Дизайнер просто не загружается, когда я использую <UILib:PaginationBar .. />, и вместо этого выдает ошибку System.Reflection.TargetInvocationException (Исключение было выдано целью вызова).Когда я запускаю проект, он выдает ошибку XamlParseException.Это единственное исключение, из которого я могу получить некоторые детали, ни одно из которых, я думаю, даже отдаленно не полезно.Во всяком случае, это то, что я получаю с XamlParseException: XamlParseExceptionDetails

Я понятия не имею, как поступить.Любая помощь очень ценится.Спасибо в ожидании:)

1 Ответ

1 голос
/ 04 июня 2011

Убедитесь, что PaginationBar определен в том же пространстве имен: "clr-namespace: ErnestUILib".Также убедитесь, что вы установили правильный DefaultStyleKey в конструкторе вашего элемента управления:

 public PaginationBar ()
    {
        DefaultStyleKey = typeof(PaginationBar );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...