首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ControlTemplate TargetType匹配

WPF ControlTemplate TargetType匹配
EN

Stack Overflow用户
提问于 2014-09-27 02:23:32
回答 2查看 4K关注 0票数 0

我有一个从ComboBox派生的组件。在其中,我创建了一个依赖属性"myDependencyProp“,如下所示。然而,在XAML中,当我提到这个属性时,VS说该类型在ComboBox中不可用,并且不运行应用程序。当我将ControlTemplate TargetType设置为my:myComboBox时,它可以正常工作,但是VS会显示一个警告:"myComboBox ControlTemplate TargetType不匹配模板化类型ComboBox“。应用程序运行正常,但我不喜欢这个警告。我怎么才能修复它?谢谢!(Obs: my:只是myNameSpaces的虚构别名)。

C#:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 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派生的类型

票数 1
EN

Stack Overflow用户

发布于 2014-09-27 03:19:26

谢谢你的回答,但我通过以下方式解决了这个问题:

首先,我将所有类型返回给{x: TargetTypes ComboBox},然后所有警告都消失了。

之后,我没有像前面那样使用MultiTrigger,而是使用了MultiDataTrigger,如下所示:

代码语言:javascript
复制
<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>

就是这样!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26065975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档