2013-06-04 1 views
3

Я использую Blend (и я очень новичок в этом) для создания XAML. У меня есть строка кода, которая вызывает функцию writeC ниже:Как мне вызвать функции с параметрами в XAML?

<Button x:Name="key_c" Content="c" HorizontalAlignment="Left" Height="60" 
    Margin="243,188.667,0,0" VerticalAlignment="Top" Width="60" FontWeight="Bold" 
    FontFamily="Century Gothic" FontSize="21.333" Foreground="Black" 
    Click="writeC"> 

Это прекрасно работает. Тем не менее, я хотел бы изменить его для вызова функции WriteChar с параметрами "a" и "A", так что он вызывает следующий C# функция:

private void writeChar(string myCharCaps, string myCharLower) 

Как я пишу это в XAML?

ответ

4

Ваш обработчик кликов должен соблюдать подпись обработчика события. Если вы хотите сделать этот обработчик простой оболочкой вокруг вашего WriteChar, все в порядке. Более подробная информация здесь: http://msdn.microsoft.com/en-us/library/bb531289(v=vs.90).aspx

+0

Хорошо, я все еще не совсем понял. Я прочитал инструкции, но я все еще немного потерял. Извините ... Я очень новичок в XAML и C#. – Brendan

+0

Не знаете, как вам помочь. Если вы запутались в написании самой функции, вы можете сделать это в XAML, но гораздо проще реализовать логику в коде за файлом (например, C# или VB.NET). –

+2

Самый простой способ получить правильную подпись - в редакторе xaml, чтобы напечатать «Click =», и он должен вывести автозаполнение как «новый обработчик событий» и просто нажать enter. он даст ему имя и создаст метод с правильной сигнатурой в файле кода. –

1

Вы можете использовать команду и параметр команды вместо обработчика событий:

ViewModel:

public ICommand MyCommand { get; private set; } 

// ViewModel constructor 
public ViewModel() 
{ 
    // Instead of object, you can choose the parameter type you want to pass. 
    MyCommand = new DelegateCommand<object>(MyCommandHandler); 
} 

public void MyCommandHandler(object parameter) 
{ 
    // Do stuff with parameter 
} 

XAML:

<Button Command="{Binding MyCommand}" CommandParameter="..." /> 

Вы можете больше узнать о командах в WPF here.

Конечно, если вы хотите кнопку, чтобы всегда выполнить код с теми же параметрами, то передача параметров из кнопки не имеет никакого значения, и эти параметры могут быть жестко закодированы в обработчик:

<Button Click="Button_Click" /> 

private void Button_Click(object sender, EventArgs e) 
{ 
    WriteChar("a", "A"); 
} 
+0

Спасибо, что это действительно хорошая ссылка –