如何仅覆盖自定义控件中的 ItemTemplate

发布于 2024-08-07 05:07:54 字数 820 浏览 2 评论 0原文

我想创建一个派生自 ComboBox 的自定义控件,但是如果我从 Visual Studio 模板创建自定义控件,它会创建一个默认的 Style 控件,然后我必须打开 MSDN ComboBoxControlTemplate ,然后在 generic.xaml 中再次重新创建整个 ComboBox 样式

我想要做的是,我想创建一个从 ComboBox 派生的自定义控件,在 generic.xaml 中我只想定义一个 ItemTemplate 而不是整个 ControlTemplate

但是,如果我保留该行

static MyComboBox()
{
    DefaultStyleKeyProperty.
         OverrideMetadata(typeof(MyComboBox), 
         new FrameworkPropertyMetadata(
             typeof(MyComboBox)));
}

,那么如果我从 generic.xaml 中删除 ControlTemplate ,那么我根本看不到任何内容,但是如果我在 generic.xaml 中定义关键 ItemTemplate ,应该如何做我初始化静态构造函数以便仅反映 ItemTemplate

当然,我可以从 msdn 帮助中重新设计 xaml 主题,但是有没有简单的方法可以做到这一点?

I want to create a Custom Control derived from ComboBox, however if I create custom control from visual studio template, it creates a default Style of Control and I have to then open MSDN's ControlTemplate of ComboBox and then recreate the entire ComboBox style once again in a generic.xaml

What I want to do is, I want to create a custom control derived from ComboBox and in the generic.xaml I only want to define an ItemTemplate and not entire ControlTemplate.

However if I keep the line

static MyComboBox()
{
    DefaultStyleKeyProperty.
         OverrideMetadata(typeof(MyComboBox), 
         new FrameworkPropertyMetadata(
             typeof(MyComboBox)));
}

Then I dont see anything at all if I remove the ControlTemplate from generic.xaml, however if I define key ItemTemplate in generic.xaml, how should I initialize my static constructor in order to refelct only ItemTemplate?

Sure I can redesign the xaml theme from msdn help but isnt there any easy way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖阳 2024-08-14 05:07:54

我最近编写了自己的自定义组合框,它仅更改控件的 ItemTemplate。组合框样式的其余部分继承自默认组合框。

在自定义控件构造函数中:

 static CustomComboBox()
 {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomComboBox)
                        , new FrameworkPropertyMetadata(typeof(CustomComboBox)));

 }

然后在 generic.xaml 中:

<Style TargetType="{x:Type local:CustomComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                **INSERT YOUR ITEM TEMPLATE HERE**
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

这里的关键是设置样式的 BasedOn 属性以引用标准组合框控件。

希望这有帮助!

I recently wrote my own custom combobox that only changes the ItemTemplate of the control. The rest of the combobox style is inherited from the default combobox.

In your custom control constructor:

 static CustomComboBox()
 {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomComboBox)
                        , new FrameworkPropertyMetadata(typeof(CustomComboBox)));

 }

And then in your generic.xaml:

<Style TargetType="{x:Type local:CustomComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                **INSERT YOUR ITEM TEMPLATE HERE**
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

The key here is setting the style's BasedOn property to reference the standard combobox control.

Hope this helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文