2010-03-01 12 views
5

Tengo DataTemplate en un diccionario de recursos, y en algunos, necesito el botón y no sé cómo puedo usar el código para administrar eventos.Agregar .cs en un ResourceDictionary?

traté de poner una clase en mi dictionnary recursos así:

<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"> 

Y definied la clase en el archivo cs así:

namespace SLProject.Templates 
{ 
    partial class TVTemplate 
    { 

    } 
} 

La construcción está bien, pero cuando el se inició la aplicación, que alcanzará el error XAML siguiente:

AG_E_PARSER_BAD_TYPE

Probé todo lo que sé como cambiar el tipo de clase a un ClassModifier, hacer que la clase heredara una clase de RessourceDictionnary ... de ninguna manera.

Alguien tiene una idee ...

Gracias.

Respuesta

0

Tiene el atributo x: Clase definido dos veces, por lo que obtiene el error del analizador. Cambiar su declaración a esto y que debería funcionar:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="SLProject.Templates.TVTemplate"> 
+0

He comprobado, y es solo un error de copiar y pasar. Tengo bien la clase definida una vez. – gtoulouse

0

he comprobado, y es sólo un error de copia-pasado. Tengo bien la clase definida una vez.

6

El uso del atributo x:Class le permite definir un código detrás de un ResourceDictionary. Debe especificar el espacio de nombre completo de la clase (es decir, x:Class="WpfApplication.MyClass"), y dicha clase debe definirse como partial (al menos VS 2010 se queja y no compila sin dicho modificador).

me burlé en marcha un ejemplo sencillo:

1. Crear un nuevo proyecto de aplicación de WPF (WpfApplication)

2. Añadir un nuevo archivo de clase (TestClass.cs) y pegar el siguiente código

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. Añadir un nuevo ResourceDictionary (Resources.xaml), abra el archivo y pegar el siguiente código

<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. Por último, abra la MainWindow.xaml y pegar el código siguiente

<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> 

En el cable plano ejemplo que un evento de doble clic de un Style, ya que es un escenario que requiere que llame a un cierto código de una ResourceDictionary.

0

Lo mejor sería hacer su propio control de usuario y agregar sus eventos en él. y luego coloque todo este usercontrol en el diccionario de recursos.

Cuestiones relacionadas