Событие управления не запускается из класса, связанного со словарем ресурсов wpf

Привет, я пытаюсь прикрепить функцию к текстовому полю, используемому для ввода некоторой входной информации, которая загружается в интерфейс из словаря ресурсов. Вот XML,

          <ContentControl>
            <Grid>
                <Image s:DesignerItem.Code ="1773"  IsHitTestVisible="False" Stretch="Fill" Source="../Images/addition.png"  ToolTip="Addition" />
                <TextBox Height="57" Width="56" Margin="13,13,130,13" BorderThickness="0" FontSize="45" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" TextChanged="msg_TextChange" KeyUp="msg_MouseDown"/>
                <TextBox Height="57" Width="56" Margin="132,13,12,13" BorderThickness="0" FontSize="45" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" KeyDown="msg_MouseDown"/>
                <Button MouseDown="msg" Width="50" Height="20">ck</Button>
            </Grid>
           </ContentControl>

В приведенном выше коде я попытался использовать несколько различных типов управляющих событий. Я успешно связал класс, в который будут помещены мои функции, используя следующие строки, чтобы связать класс со словарем ресурсов.

 x:Class="DiagramDesigner.CodeBuilding"
 x:ClassModifier="public"

Вот код класса, который я использую,

 public partial class CodeBuilding : ResourceDictionary
{
   public CodeBuilding()
   {
      InitializeComponent();
   } 

   public void msg_TextChange(object sender,EventArgs e)
   {
       MessageBox.Show("oh no, you've got me ...");
   }

   public void msg(object sender, MouseEventArgs e)
   {
       MessageBox.Show("oh no, you've got me ...");
   }
}

Как видите, я просто использую простое сообщение, чтобы указать, было ли запущено событие, проект успешно строится и работает нормально, но когда я пытаюсь инициировать любое из событий, используемых в XML, функция, привязанная к событию, делает вообще не огонь.

Я не уверен, что это лучший способ связать функцию с событием, загруженным словарем ресурсов, но может ли кто-нибудь дать некоторые рекомендации по этой проблеме, с которой я сталкиваюсь.


person Daniel    schedule 08.02.2014    source источник


Ответы (1)


Файл XAML должен зависеть от своего частичного кода позади файла, чтобы события работали.

Убедитесь, что для параметра Действие сборки кода позади файла задано значение Compile.

Также откройте файл .csproj в блокноте или любом текстовом редакторе и убедитесь, что атрибут DepedentUpon установлен в файле XAML. Это будет выглядеть так:

<Compile Include="CodeBuilding.xaml.cs">
  <DependentUpon>CodeBuilding.xaml</DependentUpon>
</Compile>

Кстати, простые шаги, чтобы заставить его работать так:

  1. Добавьте пустой UserControl в свой проект. Он автоматически сделает за вас эту работу, о которой я упоминал выше.
  2. Все, что вам нужно сделать, это просто изменить файл XAML на ResourceDictionary. (Замените UserControl на ResourceDictionary).
  3. А в коде просто измените базовый класс с UserControl на ResourceDictionary.
person Rohit Vats    schedule 09.02.2014
comment
Привет, Рохит, я попробовал это решение, которое вы представили, но функция не была вызвана. Есть ли у вас другие предложения? - person Daniel; 09.02.2014
comment
Да, я сделал. Я добавил второе решение в качестве дополнения к проекту, над которым я работаю, и он по-прежнему не запускал никаких окон сообщений :(. - person Daniel; 09.02.2014
comment
ContentControl не имеет связанного с ним x:Key. Как вы ссылаетесь на это в своем файле XAML? Можете ли вы опубликовать небольшой образец, воспроизводящий проблему? - person Rohit Vats; 09.02.2014
comment
Содержимое элемента управления не имеет ключа, но оно заключено в другой тег, к которому прикреплен ключ, вот как это выглядит. <s:Toolbox x:Key="test" ItemSize="60,50" SnapsToDevicePixels="True" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> <ItemsControl.Items> <ContentControl> .... </ContentControl> </ItemsControl.Items> </s:Toolbox> - person Daniel; 09.02.2014
comment
Я имел в виду, можете ли вы попробовать создать небольшой образец этого сценария, потому что, когда я пытался использовать простую кнопку и перехватывать ее событие щелчка, он отлично работает для меня .. !! - person Rohit Vats; 09.02.2014
comment
Рохит, спасибо за все время и помощь, которую вы предоставили, но я не могу заставить функцию перехватывать события управления :(. Я действительно хотел бы отложить это до чата, но это в настоящее время выходит за рамки моих возможностей. - person Daniel; 12.02.2014
comment
Попробуйте воспроизвести ту же проблему в небольшом образце, потому что это работает. Обратитесь к моему ответу здесь, который работал для OP. - person Rohit Vats; 12.02.2014