Добавление .cs в ResourceDictionary?

У меня есть 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...

Спасибо.

5
задан gtoulouse 1 March 2010 в 15:14
поделиться

3 ответа

Атрибут 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
ответ дан 14 December 2019 в 13:34
поделиться

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

0
ответ дан 14 December 2019 в 13:34
поделиться

Использование атрибута 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.

6
ответ дан 14 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: