如何从ComboBox创建新的usercontrol继承?

时间:2018-01-09 11:49:45

标签: wpf

我想创建一个新的usercontrol,它继承自ComboBox。我将为它添加一些新属性,并重写其ControlTemplate。

这是XAML:

// you can now mock authentication results, and set them up to 
// emulate whatever conditions you like
var mockResult = new Mock<IAuthenticationResultWrapper>();

// you'll need to use the IAuthenticationContextWrapper, so all the
// method signatures know about our new IAuthenticationResultWrapper
var mockAuth = new Mock<IAuthenticationContextWrapper>();

// here's how we mock the IAuthenticationContextWrapper to return our
// mocked IAuthenticationResultWrapper
mockAuth.Setup(x => x.Authenticate(null, param2, param3, param4))
        .Returns(Task.FromResult(mockResult.Object));

这里有代码:

  <ComboBox x:Class="Pesticide.CustomUserControls.ComboxUserControl"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:Pesticide.CustomUserControls"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <ComboBox.Resources>
            <ControlTemplate  TargetType="{x:Type ComboBox}" x:Key="{x:Type ComboBox}">
                    <Grid></Grid>
</ControlTemplate>
        </ComboBox.Resources>
    </ComboBox>

但是,我刚刚编写了这些代码,但是WPF抛出了一个错误,即“InvalidCastException:无法将类型为'System.Windows.Controls.ControlTemplate'的对象强制转换为'System.Windows.Style'。”

我的代码出了什么问题?请你帮我吗?

谢谢你。

1 个答案:

答案 0 :(得分:1)

  

我的代码出了什么问题?

使用类型作为资源键是WPF处理默认样式的方式。

所以资源

x:Key="{x:Type ComboBox}"

不能是ControlTemplate。它必须是一种风格。

但是,直接设置Template属性更简单:

<ComboBox ...>
    <ComboBox.Template>
        <ControlTemplate TargetType="ComboBox">
            ...
        </ControlTemplate>
    </ComboBox.Template>
</ComboBox>