Я создаю собственный WPF Expander, унаследованный от общего Expander. У меня есть файл со стилями по пути MyAssembly/Theme/generic.xaml. Я вижу, что стили применяются в конструкторе, но не работают с программой .
MyAssembly/Theme/generic.xaml
MyExpander.xaml:
<Expander x:Class="Path.To.MyExpander" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"> <Expander.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MyAssembly;component/Theme/generic.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Expander.Resources> ...
Generic.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"> ...
код, в котором я запускаю расширители:
class Viewer { private void GenerateExpanders() { this.Expanders.Children.Clear(); foreach (...) { MyExpander ex = new MyExpander(); ex.HeaderText.Text = "Sample"; ex.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; ex.IsExpanded = true; this.Expanders.Children.Add(ex); } } }
Все три файла находятся в одной сборке, но экземпляр класса Viewer создается в другой сборке. Что-то я не так делаю?
у меня было
<Style TargetType="Expander"
но должно быть
<Style TargetType="MyExpander"
Я не осознавал, что это больше не был Expander - это был MyExpander (class MyExpander : Expander)
class MyExpander : Expander