我有一个从ComboBox派生的组件。在其中,我创建了一个依赖属性"myDependencyProp“,如下所示。然而,在XAML中,当我提到这个属性时,VS说该类型在ComboBox中不可用,并且不运行应用程序。当我将ControlTemplate TargetType设置为my:myComboBox时,它可以正常工作,但是VS会显示一个警告:"myComboBox ControlTemplate TargetType不匹配模板化类型ComboBox“。应用程序运行正常,但我不喜欢这个警告。我怎么才能修复它?谢谢!(Obs: my:只是myNameSpaces的虚构别名)。
C#:
namespace myNameSpace
{
public partial class myComboBox : ComboBox
{
public static readonly DependencyProperty myDependencyPropProperty =
DependencyProperty.Register("myDependencyProp", typeof(bool),
typeof(myComboBox), new UIPropertyMetadata(false));
public myComboBox()
{
InitializeComponent();
}
public bool IsFirstItemTip
{
get { return (bool)GetValue(myDependencyPropProperty); }
set { SetValue(myDependencyPropProperty, value); }
}
}
}XAML:
<ComboBox.Resources>
<Style x:Key="myComboBox" TargetType="{x:Type ComboBox}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type my:myComboBox}">
<Grid>
<ToggleButton
...
</ToggleButton>
<ContentPresenter
...
</ContentPresenter>
<Popup
...
</Popup>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="SelectedIndex" Value="0"/>
<Condition Property="myDependencyProp" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter ... />
</MultiTrigger.Setters>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.Resources>发布于 2014-09-27 02:30:05
将此行<Style x:Key="myComboBox" TargetType="{x:Type ComboBox}">更改为<Style x:Key="myComboBox" TargetType="{x:Type my:myComboBox}">以消除警告。该警告告诉您,您的样式将隐式应用于所有ComboBoxes,但控件模板适用于那些从myComboBox派生的类型
发布于 2014-09-27 03:19:26
谢谢你的回答,但我通过以下方式解决了这个问题:
首先,我将所有类型返回给{x: TargetTypes ComboBox},然后所有警告都消失了。
之后,我没有像前面那样使用MultiTrigger,而是使用了MultiDataTrigger,如下所示:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=SelectedIndex, RelativeSource={RelativeSource Self}}" Value="0"/>
<Condition Binding="{Binding Path=myDependencyProp, RelativeSource={RelativeSource Self}}" Value="True"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter .../>
</MultiDataTrigger.Setters>
</MultiDataTrigger>就是这样!
https://stackoverflow.com/questions/26065975
复制相似问题