WPF VB.net - Можно ли выполнить несколько командных привязок для одной и той же команды? - PullRequest
0 голосов
/ 25 июля 2011

В WPF я пытаюсь использовать команды для установки всего содержимого в нескольких текстовых полях одновременно.Следующий код может заставить команду на кнопке переключения выполняться, для которой когда-либо текстовое поле имеет область действия, но я не могу заставить команду выполнить их одновременно.

<StackPanel>
    <ToggleButton FocusManager.IsFocusScope="True" Command="EditingCommands.ToggleBold" Width="20" Height="20"></ToggleButton>
    <RichTextBox Width="200" Height="200">
        <RichTextBox.CommandBindings>
            <CommandBinding 
                        Command="EditingCommands.ToggleBold" 
                        Executed="CommandBinding_Executed" CanExecute="CommandBinding_CanExecute"/>
        </RichTextBox.CommandBindings>
    </RichTextBox>
    <RichTextBox Width="200" Height="200">
        <RichTextBox.CommandBindings>
            <CommandBinding 
                        Command="EditingCommands.ToggleBold" 
                        Executed="CommandBinding_Executed" CanExecute="CommandBinding_CanExecute"/>
        </RichTextBox.CommandBindings>
    </RichTextBox>
</StackPanel>

Private Sub CommandBinding_Executed(ByVal sender As System.Object, ByVal e As System.Windows.Input.ExecutedRoutedEventArgs)
    DirectCast(sender, RichTextBox).SelectAll()
    DirectCast(sender, RichTextBox).Selection.ApplyPropertyValue(RichTextBox.FontWeightProperty, "Bold")
    e.Handled = False
End Sub

Private Sub CommandBinding_CanExecute(ByVal sender As System.Object, ByVal e As System.Windows.Input.CanExecuteRoutedEventArgs)
    e.CanExecute = True
End Sub

Возможно ли то, что я пытаюсь сделать с помощью команд?Я бы предпочел не делать прямых ссылок на каждое текстовое поле в коде внутри click_event или чего-либо подобного.

Спасибо за помощь!

1 Ответ

0 голосов
/ 25 июля 2011

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

Что-то вроде

foreach(var child in MyRootPanel.Children)
{
    if (child is RichTextBox)
    {
        // Process whatever
    }
}
...