У меня есть 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">
И я definied класс в cs файле как этот:
namespace SLProject.Templates
{
partial class TVTemplate
{
}
}
Сборка в порядке, но когда приложение запустилось, я получаю ошибочное следующее XAML:
AG_E_PARSER_BAD_TYPE
Я попробовал все, что я знаю как изменение вид класса к ClassModifier, делаю классом к наследованному классу RessourceDictionnary... ни за что.
У кого-то есть idee...
Спасибо.
Атрибут 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">
Я проверил, и это просто ошибка копирования. Я хорошо определил класс один раз.
Использование атрибута x:Class
позволяет вам определить codebehind для 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
.