我想创建一个新的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'。”
我的代码出了什么问题?请你帮我吗?
谢谢你。
答案 0 :(得分:1)
我的代码出了什么问题?
使用类型作为资源键是WPF处理默认样式的方式。
所以资源
x:Key="{x:Type ComboBox}"
不能是ControlTemplate。它必须是一种风格。
但是,直接设置Template属性更简单:
<ComboBox ...>
<ComboBox.Template>
<ControlTemplate TargetType="ComboBox">
...
</ControlTemplate>
</ComboBox.Template>
</ComboBox>