我在资源词典中有DataTemplate,在某些情况下,我需要按钮,我不知道如何使用代码来管理事件。
我试着在我的资源词典中添加一个类:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SLProject.Templates"
x:Class="TVTemplate">
我在cs文件中定义了这样的类:
namespace SLProject.Templates
{
partial class TVTemplate
{
}
}
构建正常,但是当应用程序启动时,我获得了以下XAML错误:
AG_E_PARSER_BAD_TYPE
我尝试了所有我知道的将类类更改为ClassModifier,使类成为继承的RessourceDictionnary类......没办法。
有人有想法......
感谢。
答案 0 :(得分:6)
使用x:Class
属性可以为ResourceDictionary
定义代码隐藏。
您必须指定类的完整名称空间(即x:Class="WpfApplication.MyClass"
),并且此类必须定义为partial
(至少VS 2010会抱怨,如果没有这样的修饰符则不会编译)。
我嘲笑了一个简单的例子:
1。创建新的WPF应用程序项目( WpfApplication )
2。添加新的类文件( TestClass.cs )并粘贴以下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using System.Windows;
namespace WpfApplication
{
public partial class TestClass
{
private void OnDoubleClick(object obj, MouseButtonEventArgs args)
{
MessageBox.Show("Double clicked!");
}
}
}
3。添加新的ResourceDictionary
( Resources.xaml ),打开文件并粘贴以下代码
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication.TestClass">
<Style TargetType="{x:Type Label}">
<EventSetter Event="Label.MouseDoubleClick" Handler="OnDoubleClick"/>
</Style>
</ResourceDictionary>
4. 最后,打开 MainWindow.xaml 并通过以下代码
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary Source="Resources.xaml"/>
</Window.Resources>
<Grid>
<Label Content="Double click here..." HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="Red"/>
</Grid>
</Window>
在示例中,我从Style
汇总了双击事件,因为这是一个需要您从ResourceDictionary
调用某些代码的方案。
答案 1 :(得分:0)
你有两次定义的x:Class属性,这就是你得到解析器错误的原因。将您的声明更改为此,它应该有效:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SLProject.Templates.TVTemplate">
答案 2 :(得分:0)
我检查了,这只是复制过去的错误。我很好,班级定了一次。
答案 3 :(得分:0)
最好的办法是制作自己的用户控件并在其中添加事件。然后将整个usercontrol放在资源字典中。