2010-03-01 3 views
5

У меня есть DataTemplate в dictionnary ressource, а в некоторых - мне нужна кнопка, и я не знаю, как я могу использовать код для управления событиями.Добавление .cs в ResourceDictionary?

Я пытался поставить класс в мой ресурс dictionnary подобное:

<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

У вас есть атрибут 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"> 
+0

Я проверил, и это просто ошибка копирования прошлого. Я хорошо определил класс один раз. – gtoulouse

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> 

в примере I провод-вверх в случае двойного щелчка от Style, так как сценарий требует, чтобы вы звоните код из ResourceDictionary.

0

Лучше всего сделать свой собственный пользовательский контроль и добавить в него свои события. а затем поместить весь этот пользовательский контроль в словарь ресурсов.

Смежные вопросы