Я следовал руководству, чтобы создать пользовательский элемент управления.В основном я сделал новый проект, добавил файл 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:
Я понятия не имею, как поступить.Любая помощь очень ценится.Спасибо в ожидании:)