WPF: производный пользовательский контроль от элемента управления в другом проекте. Как заставить его использовать тот же стиль? - PullRequest
0 голосов
/ 16 декабря 2010

Я использую «Extended WPF Toolkit» (http://wpftoolkit.codeplex.com/), и для своих собственных целей я создал универсальную версию его элемента управления NumericUpDown под названием GNumericUpDown , который фактически позволяет мне указать, какой тип использовать, т.е. GNumericUpDown . (Это сделано для того, чтобы убедиться, что элемент управления учитывает соответствующие значения Min / MaxValues ​​требуемого типа)

Чтобы иметь возможность использовать различные типы из Xaml, я создал новый проект с конкретными производными версиями, например NumericUpDownFloat, который является производным от GNumericUpDown .

Но когда я использую NumericUpDownFloat в XAML, ничего не отображается. Я предполагаю, что это потому, что есть только стиль, указанный для NumericUpDown набора инструментов WPF в ресурсе Generic.xaml ресурса WPF Toolkit.

Так, как я могу сделать так, чтобы все мои конкретные версии (NumericUpDownInt, NumericUpDownByte, ..) фактически использовали этот стиль?

Ответы [ 2 ]

1 голос
/ 18 декабря 2010

Вы должны получить последний исходный код для расширенного инструментария WPF. Обновленный элемент управления NumericUpDown позволяет указать, какой тип данных использовать в редакторе. Следующий код указывает на использование Int32 в качестве типа данных вместо двойного по умолчанию. Как вы можете видеть, это делается путем установки свойства ValueType в элементе управления NumericUpDown.

<extToolkit:NumericUpDown Grid.Row="1" Value="{Binding Age}" Increment="1" Minimum="18" Maximum="65" ValueType="{x:Type sys:Int32}" />

Это избавит от необходимости отдельного проекта со специальными элементами управления.

0 голосов
/ 16 декабря 2010

По умолчанию, когда вы создаете любой тип настраиваемого элемента управления, WPF помещает это в статический конструктор класса для вас:

DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));

Это говорит WPF, что вы собираетесь как-то предоставить тему для него,По умолчанию папка Themes будет создана в корне проекта, а внутри нее будет создан файл Generic.xaml с шаблоном стиля и элемента управления CustomControl1.

Если вы хотите сообщить WPF, вы будетепереопределяя стиль (или, по сути, переопределяя свойство зависимости ключа стиля по умолчанию), вы просто помещаете эту строку в статический конструктор.Если вы хотите, чтобы он возвращался к тому же стилю родительского, просто пропустите эту строку и что-то вроде этого:

public class SuperAwesomeControl : Border
{
    ....
}

По умолчанию всегда будет выглядеть как граница.

...