Нужно убрать стрелочку из ComboBox и с этой целью пытаюсь получить стандартный ControlTemplate и сделать в нём соответсвующие изменения. Но проблема в том что Visual studio 2015 для проекта под .NET 4.0 и .NET 4.0 client profile выдаёт неполный шаблон ComboBox. А вот для проектов под остальные версии .NET шаблон полный. При попытке использования шаблона вылезает ошибка
InvalidOperationException: Must have non-null value for 'Property'.. И вот тако Stack trace:
at System.Windows.Condition.Seal(ValueLookupType type)
at System.Windows.ConditionCollection.Seal(ValueLookupType type)
at System.Windows.MultiTrigger.Seal()
at System.Windows.TriggerCollection.Seal()
at System.Windows.StyleHelper.SealTemplate(FrameworkTemplate frameworkTemplate, Boolean& isSealed, FrameworkElementFactory templateRoot, TriggerCollection triggers, ResourceDictionary resources, HybridDictionary childIndexFromChildID, FrugalStructList`1& childRecordFromChildIndex, FrugalStructList`1& triggerSourceRecordFromChildIndex, FrugalStructList`1& containerDependents, FrugalStructList`1& resourceDependents, ItemStructList`1& eventDependents, HybridDictionary& triggerActions, HybridDictionary& dataTriggerRecordFromBinding, Boolean& hasInstanceValues, EventHandlersStore& eventHandlersStore)
at System.Windows.FrameworkTemplate.Seal()
at System.Windows.Controls.Control.OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
Здравствуйте, romakoma, Вы писали:
R>Нужно убрать стрелочку из ComboBox и с этой целью пытаюсь получить стандартный ControlTemplate и сделать в нём соответсвующие изменения. Но проблема в том что Visual studio 2015 для проекта под .NET 4.0 и .NET 4.0 client profile выдаёт неполный шаблон ComboBox. А вот для проектов под остальные версии .NET шаблон полный. При попытке использования шаблона вылезает ошибка InvalidOperationException: Must have non-null value for 'Property'.. И вот тако Stack trace:
R>R> at System.Windows.Condition.Seal(ValueLookupType type)
R> at System.Windows.ConditionCollection.Seal(ValueLookupType type)
R> at System.Windows.MultiTrigger.Seal()
R> at System.Windows.TriggerCollection.Seal()
R> at System.Windows.StyleHelper.SealTemplate(FrameworkTemplate frameworkTemplate, Boolean& isSealed, FrameworkElementFactory templateRoot, TriggerCollection triggers, ResourceDictionary resources, HybridDictionary childIndexFromChildID, FrugalStructList`1& childRecordFromChildIndex, FrugalStructList`1& triggerSourceRecordFromChildIndex, FrugalStructList`1& containerDependents, FrugalStructList`1& resourceDependents, ItemStructList`1& eventDependents, HybridDictionary& triggerActions, HybridDictionary& dataTriggerRecordFromBinding, Boolean& hasInstanceValues, EventHandlersStore& eventHandlersStore)
R> at System.Windows.FrameworkTemplate.Seal()
R> at System.Windows.Controls.Control.OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
R> at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
R> at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
R> at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
R> at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
R> at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
R> at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
R>
Скачал другой образ Windows 7, переустановил ОС, запустил Blend. На этот раз для проекта под .NET 4 Blend сгенерировал полный шаблон, но с ошибкой вот здесь:
<ControlTemplate x:Key="ComboBoxControlTemplate1" TargetType="{x:Type ComboBox}">
…
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsGrouping" Value="True"/>
<Condition>
<Condition.Value>
<System:Boolean>False</System:Boolean>
</Condition.Value>
</Condition>
</MultiTrigger.Conditions>
<Setter Property="ScrollViewer.CanContentScroll" Value="False"/>
</MultiTrigger>
</ControlTemplate.Triggers>
…
</ControlTemplate>
Если этот код закоментировать либо заменить на
<Trigger Property="ItemsControl.IsGrouping">
<Setter Property="ScrollViewer.CanContentScroll">
<Setter.Value>
<s:Boolean>False</s:Boolean>
</Setter.Value>
</Setter>
<Trigger.Value>
<s:Boolean>True</s:Boolean>
</Trigger.Value>
</Trigger>
то всё равботает.