WPF控制模板目标类型匹配
我有一个从组合框派生的组件。在其中,我创建了一个依赖属性“myDependencyProp”,如下代码所示。但是,在XAML中,当我引用此属性时,VS表示该类型在ComboBox中不可用,并且不运行应用程序。当我将ControlTemplate TargetType设置为my:myComboBox时,它工作正常,但是,VS显示一条警告:“myComboBox ControlTemplate TargetType与模板类型ComboBox不匹配”。应用程序运行正常,但我不喜欢此警告。我怎样才能修好它?谢谢(Obs:my:只是myNameSpaces的一个虚构别名) C#: XAML:WPF控制模板目标类型匹配,wpf,Wpf,我有一个从组合框派生的组件。在其中,我创建了一个依赖属性“myDependencyProp”,如下代码所示。但是,在XAML中,当我引用此属性时,VS表示该类型在ComboBox中不可用,并且不运行应用程序。当我将ControlTemplate TargetType设置为my:myComboBox时,它工作正常,但是,VS显示一条警告:“myComboBox ControlTemplate TargetType与模板类型ComboBox不匹配”。应用程序运行正常,但我不喜欢此警告。我怎样才能修好
换行
到
以消除警告。警告告诉您,您的样式将隐式应用于所有组合框
,但控件模板适用于从myComboBox
派生的类型。谢谢您的回答,但我通过执行以下操作解决了问题:
首先,我将所有TargetTypes返回给{x:Type 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>
就是这样 我想您还应该将样式的TargetType
设置为“{x:Type my:myComboBox}”
。我做了那个更改,应用程序仍然运行,但现在警告消息是:“myComboBox TargetType与元素组合框的类型不匹配”。这只是一个破解(或解决方法)。绑定路径
在设计时没有解析(因此没有警告),但在运行时它运行正常。是的,我知道,但以前的所有建议都没有解析这些警告。我现在看不到另一个解决办法。
<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>
<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>