#.net #silverlight #xaml #windows-phone-7 #xamlparseexception
#.net #silverlight #xaml #windows-phone-7 #исключение xamlparseexception
Вопрос:
Я следовал руководству по созданию пользовательского элемента управления. Что я в основном сделал, так это создал новый проект, добавил файл CategoryBar.cs
и каталог, вызываемый Themes
с помощью file Themesgeneric.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:
Я понятия не имею, как действовать дальше. Любая помощь приветствуется. Спасибо в ожидании 🙂
Ответ №1:
Убедитесь, что PaginationBar определен в том же пространстве имен: «clr-namespace:ErnestUILib». Также убедитесь, что вы установили правильный DefaultStyleKey в конструкторе вашего элемента управления:
public PaginationBar ()
{
DefaultStyleKey = typeof(PaginationBar );
}
Комментарии:
1. На самом деле из-за некоторых проблем с тем, как я вводил текст, или бог знает чего, вопрос не отображался должным образом. На самом деле я разместил два разных набора кода. И во второй части я упомянул TargetType как ‘local:PaginationBar’. Большое вам спасибо за ответ, но не мог бы я побеспокоить вас перечитать мой вопрос теперь, когда я его правильно отредактировал? Я сожалею об этом 🙂
2. большое вам спасибо!! Оказывается, поскольку я копировал-вставлял код из предыдущего созданного мной элемента управления, я забыл изменить эту часть. P.S: Я создал оба элемента управления, следуя руководству из того самого блога, соучредителем которого вы являетесь. Хорошая работа! Приветствия 🙂