Я думаю, что это потому, что троичная операция не является правильной в первом, и она не набирает начальное значение. Вместо сложения (+) используйте + = на аккумуляторе.
let a = 1, b = 2
let c = 0
c + a === 1 ? a : b // fails, c = 0
c += a === 1 ? a : b // success, c = 1
Я записал эти взгляды, что Вы говорили о WPF, а не Silverlight, но может быть достаточно перекрытия для этого, чтобы быть полезным, таким образом, я отправляю его, так или иначе.
, Если "изменением появление базового класса" Вы имеете в виду, "обеспечивают новый шаблон", тогда то, в чем Вы нуждаетесь, является, вероятно, CustomControl, не UserControl.
лучший способ выполнить это состоит в том, чтобы последовать примеру, установленному другими средствами управления Microsoft, такими как Кнопка или ListBox:
Это - конечно, намного больше работы, чем простое получение из UserControl, но если Вы хотите быть в состоянии полностью повторно обработать средства управления по шаблону, как Вы может со встроенными средствами управления, это - способ сделать это.
, С другой стороны , если все Вы хотите сделать, должен обеспечить определенное количество ограниченной настройки, такой как изменение фона или соединение Команды с некоторым пользовательским действием, тогда лучшая вещь сделать состоит в том, чтобы представить DependencyProperties, который может тогда быть установлен в стилях для Вашего управления, или на экземплярах Вашего управления, самого.
В случае Вы упомянули желания настроить взгляд в наследованном управлении, процесс довольно подобен: просто добавьте стиль по умолчанию для нового управления с новым шаблоном; если необходимо добавить больше обработчиков событий, просто абсолютно уверены, что Вы называете основу. OnApplyTemplate ().
Я не знаю, мне нравится делать вещи только с объектами. Вот статья, которая описывает простой способ подсунуть XAML-разработанное управление вне Вашей иерархии наследования так, чтобы можно было настроить использование внешнего вида и поведения SimpleThingsLikeInheritance, а не MicrosoftStuffThatAlmostWorks
http://gen5.info/q/2009/02/10/subverting-xaml-how-to-inherit-from-silverlight-user-controls/
Можно решить это при помощи обертки, как описано в ссылке выше. Но можно также использовать стратегическую модель для решения этой проблемы.
В этом сообщении я объясняю, как Вы реализуете эти два метода. http://www.lab101.be/2008/07/silverlight-usercontrol-inheritance/
Как описано в ссылке Михни, самое простое решение - просто добавить пространство имен в ваш XAML:
public class MyBase : UserControl
{
}
public class FirstUserControl : MyBase
{
...
}
<local:MyBase
x:Class="FirstUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="YourAssembly" ...>
<!-- Sticking with UserControl instead of local:MyBase makes this clearer -->
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
..
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
..Your XAML
</local:MyBase>