У меня есть настраиваемая библиотека управления, в которой у меня есть несколько настраиваемых элементов управления, которые я использую в своем основном приложении. У меня есть простой пользовательский элемент управления, который позволяет пользователю выбирать значения толщины пера из выпадающего списка. Теперь я создаю новый настраиваемый элемент управления, основанный на списке, и я хочу включить выпадающее значение пера в элемент ItemTemplate нового пользовательского элемента управления.WPF: Ошибка использования настраиваемого элемента управления в ItemTemplate другого настраиваемого элемента управления
Я получаю эту ошибку:
«Невозможно создать экземпляр„LineThicknessComboBox“, определенной в сборке CustomControls ... Исключение было брошено в целью вызова ошибки в объекте.„10_T“в файле разметки . CustomControls; компонент/Темы/CustomListBox.General.xaml '
Вот XAML и код позади для LineThicknessComboBox:
namespace CustomControls
{
public class LineThicknessComboBox : ComboBox
{
public LineThicknessComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(LineThicknessComboBox)
, new FrameworkPropertyMetadata(typeof(LineThicknessComboBox)));
}
}
}
и LineThickne ssCombobox.Generic.xaml:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomControls">
<Style TargetType="{x:Type local:LineThicknessComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
...
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Вот XAML и отделенного кода для моего нового CustomListBox:
namespace CustomControls
{
public class CustomListBox : ListBox
{
public CustomListBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListBox)
, new FrameworkPropertyMetadata(typeof(CustomListBox)));
}
}
}
и CustomListBox.Generic.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomControls">
<Style TargetType="{x:Type local:CustomListBox}" BasedOn="{StaticResource {x:Type ListBox}}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border>
...
<local:LineThicknessComboBox />
...
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
А вот мой Generix.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CustomControls;component/Themes/LineThicknessComboBox.Generic.xaml"/>
<ResourceDictionary Source="CustomControls;component/Themes/CustomListBox.Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Я думаю У меня есть какая-то ссылочная проблема, но я не могу понять, что не так. Программа компилируется и запускается без каких-либо предупреждений/ошибок, но когда CustomListBox создается в моем основном приложении, я получаю указанную выше ошибку. Не включая LineThicknessComboBox, CustomListBox отлично работает.
Может кто-нибудь объяснить, почему я получаю эту ошибку? Можно включить мой пользовательский элемент управления в другой, даже если они находятся в одной и той же пользовательской библиотеке управления, правильно?
Спасибо!
"Исключение был брошен в адресат вызова." Просверлите InnerException (вам может потребоваться развернуть более одного уровня), и вы должны найти более значимое исключение.Это может сделать ошибку очевидной, как только вы ее увидите, или если вы ее опубликуете, это поможет в диагнозе. – itowlson