использование перенаправленных событий в пользовательских элементах управления Silverlight - PullRequest
0 голосов
/ 21 апреля 2011

в моем текущем файле проекта. У меня есть пользовательский элемент управления, к которому применена анимация раскадровки. При нажатии кнопки на странице раскадровка запускается и в основном визуально представляет элемент управления пользователю. Раскадровка находится на текущей странице как ресурс

<navigation:Page.Resources>
    <Storyboard x:Name="PreferncesOpen">....</Storyboard x:Name="PreferncesOpen">
        </navigation:Page.Resources>

На странице у меня есть кнопка, на которой у меня есть событие щелчка, которое запускает раскадровку

private void btnOpenPreferences_Click(object sender, RoutedEventArgs e)
    {
        preferencesPanel.Visibility = System.Windows.Visibility.Visible;
        PreferncesOpen.Begin();
    }

Внутри userControl (PreferencesPanel) у меня есть кнопка, при нажатии которой необходимо закрыть / свернуть пользовательский элемент управления. Я планирую сделать это с помощью Visibility.collapsed. Я предполагаю, что мне нужно использовать перенаправленные команды, поскольку кнопка находится в пользовательском элементе управления, но действия должны вызываться на странице, содержащей элемент управления? Я все еще новичок в перенаправленных командах, и я предполагаю, что это правильный подход. Я просто не уверен, как щелкнуть по кнопке в пользовательском элементе управления и заставить ее изменять или выполнять команды, которые могут повлиять на то, как может измениться страница (в которой находится этот элемент управления), или на эту часть повлиять на другие элементы страницы? Например, когда кнопка нажимается в пользовательском элементе управления, я бы хотел, чтобы видимость пользовательского элемента управления была свернута. Я также хотел бы, чтобы ширина одного из столбцов сетки в пределах главной страницы изменялась. Я делал это в прошлом, используя код для страницы, но я пытаюсь отделить некоторые из них, и я подумал, что для этого нужно использовать маршрутизируемые команды? Буду очень признателен за любые советы.

Заранее спасибо

1 Ответ

0 голосов
/ 21 апреля 2011

Название немного вводит в заблуждение, вы спрашиваете о командах, а не о перенаправленных событиях, если я вас правильно понимаю.

Вот пример использования DelegateCommand<T> из библиотеки Prism;Это мое личное предпочтение.

Разметка:

<Button x:Name="MyButton" Content="Btn" Command="{Binding DoSomethingCommand}"/>

Кодовый код * или ViewModel:

(* если вы не используете MVVM, обязательно добавьте MyButton.DataContext = this;, чтобы быть уверенным в том, что кнопка может эффективно привязать данные к вашему коду)

public DelegateCommand<object> DoSomethingCommand
{
    get 
    { 
        if(mDoSomethingCommand == null)
            mDoSomethingCommand = new DelegateCommand(DoSomething, canDoSomething);
        return mDoSomethingCommand;
    }

private DelegateCommand<object> mDoSomethingCommand;

// here's where the command is actually executed
void DoSomething(object o)
{}

// here's where the check is made whether the command can actually be executed
// insert your own condition here
bool canDoSomething(object o)
{ return true; }


// here's how you can force the command to check whether it can be executed
// typically a reaction for a PropertyChanged event or whatever you like
DoSomethingCommand.RaiseCanExecuteChanged();

Аргумент, переданный вышеупомянутой функции:свойство зависимости CommandParameter (в Prism это присоединенное свойство, а также свойство Command, если память мне не изменяет).Когда он установлен, вы можете передать значение по вашему выбору команде, которую хотите выполнить.

Надеюсь, это поможет.

...