“确保事件失败”错误发生

时间:2015-10-13 05:14:33

标签: c# wpf custom-controls

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:CustomCalc">
    <Style TargetType="{x:Type local:CustomControl1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">

                    <TextBlock Text="welcome" Height="50" Width="150" MouseDown=""/>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

在上面的程序中,(在自定义控件库中的程序中锻炼) 我正在尝试更改控件textblock =&gt;按钮。(文本块充当按钮功能) 所以我尝试向文本块添加一个事件,它会给出一条错误消息“确保事件失败”, 这个文件名是“Generic.xaml”所以我添加了一个类“Generic.xaml.cs”,但显示相同的错误。 请提前解释,请解释为什么会发生以及如何解决它。

5 个答案:

答案 0 :(得分:6)

您需要添加x:Class属性以支持XAML文件中的事件处理程序。所以你的Generic.xaml应该是这样的:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:CustomCalc"
    x:Class="CustomCalc.Generic">
    <Style TargetType="{x:Type local:CustomControl1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                    <TextBlock Text="welcome" Height="50" Width="150" MouseDown="TextBlock_MouseDown"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

至于Generic.xaml.cs

namespace CustomCalc
{
    public partial class Generic : ResourceDictionary
    {
        private void TextBlock_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {

        }
    }
}

另外,请不要忘记在ResourceDictionary文件中合并App.Xaml

<Application.Resources>
    <ResourceDictionary >
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/CustomCalc;component/Generic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

答案 1 :(得分:3)

在我使用 Visual Studio 2015 和WPF项目的情况下,Visual Studio重新启动后错误消失了。

答案 2 :(得分:0)

在我的情况下,XAML文件(App.xaml是特定的)在我尝试创建事件时在共享项目中,并且在此线程的错误主题下卡住了几分钟。

我的解决方案是从共享项目中排除XAML文件及其XAML.cs文件,然后在每个依赖平台项目中链接(不复制!)它。

有关链接过程的图形可视化,请参阅以下GIF: Linking files between projects

来源: http://geertvanhorrik.com/2015/04/01/fix-for-wpf-images-and-shared-projects/

答案 3 :(得分:0)

通过关闭并重新打开导致错误的xaml文档(Visual Studio 2017)解决了我的问题。我的xaml也在共享项目中。

如果需要,重启Visual Studio也对我有帮助。

答案 4 :(得分:0)

当前在VS 2017 Enterprise中运行Xamarin Forms,并出现了此问题。

就我而言,它仅在尝试将事件处理程序添加到新定义的xaml Button时发生。取消调试并再次尝试解决此问题。