在ResourceDictionary中添加.cs?

时间:2010-03-01 15:14:12

标签: c# .net xaml silverlight-4.0 expression-blend

我在资源词典中有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类......没办法。

有人有想法......

感谢。

4 个答案:

答案 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放在资源字典中。