2009-11-24 3 views
15

Я разрабатываю приложение WPF и имею TextBlock, который я хочу использовать для связывания команды, чтобы вызвать команду при нажатии. Каков наилучший способ достичь этого?Включить привязку команд для TextBlock

  • Элемент управления TextBlock не имеет свойства Command, но имеет CommandManager. Что это? Может ли он использоваться для привязок команд? Я видел много других элементов управления, а также с этим свойством.

  • Есть ли какой-то контроль, который я контролировал, который может быть использован? Это, например, рекомендуется использовать кнопку и стиль, чтобы она не выглядела как кнопка?

  • Есть ли некоторые элементы управления, поддерживающие привязки команд, которые я могу обернуть вокруг TextBlock?

  • Должен ли я создать пользовательский элемент управления, который в основном представляет собой TextBlock, но с дополнительными свойствами Command и CommandArgument, который позволяет связывать команды, например. свойство MouseLeftButtonDown.

ответ

17

Есть некоторый контроль я под контролем, которые могут быть использованы? Это, например, рекомендуется использовать кнопку и стиль, чтобы она не выглядела как кнопка?

Да. Самый простой подход - переформатировать кнопку, чтобы действовать как TextBlock и использовать свойство команды в классе кнопок.

Что-то вроде этого:

<ControlTemplate TargetType="Button"> 
     <TextBlock Text="{TemplateBinding Content}" /> 
    </ControlTemplate> 
... 
<Button Content="Foo" Command="{Binding Bar}" /> 
+0

Спасибо. Работает как ожидалось - и это на самом деле довольно аккуратно ..! Теперь я читал об ControlTemplates в «WPF Unleased», и это кажется правильным. Что означает «Text =» {TemplateBinding Content} «"? Привязать привязанность объектов Content к свойствам Text в блоке TextBlock? – stiank81

+0

Да, это именно то, что он делает. –

0
<Window.Resources> 
<CommandBinding x:Key="binding" Command="ApplicationCommands.Save" Executed="SaveCommand" CanExecute="SaveCommand_CanExecute" /> 
</Window.Resources> 


<TextBox Margin="5" Grid.Row="2" TextWrapping="Wrap" AcceptsReturn="True" TextChanged="txt_TextChanged"> 
<TextBox.CommandBindings> 
<StaticResource ResourceKey="binding"></StaticResource> 
</TextBox.CommandBindings> 
</TextBox> 

Вы видели http://www.java2s.com/Tutorial/CSharp/0470__Windows-Presentation-Foundation/BindTextBoxsavecommandtoCommandBinding.htm

+0

Просьба пояснить, как этот ответ затрагивает вопрос – CocoNess

2

Ниже XAML может быть использован для добавления команды привязок к WPF TextBlock, который будет работать на действия мыши.

<TextBlock FontWeight="Bold" Text="Header" Cursor="Hand"> 
    <TextBlock.InputBindings> 
     <MouseBinding Command="ApplicationCommands.Cut" MouseAction="LeftClick"/> 
    </TextBlock.InputBindings> 
</TextBlock> 

The Command может быть одним из встроенных команд приложений, которые будут использовать синтаксис, как показано выше, или это может быть пользовательским Command, который наследует от ICommand интерфейса. В этом случае синтаксис будет:

<MouseBinding Command="{Binding myCustomCommand}" MouseAction="LeftClick"/> 

MouseAction не дает никаких советов Intellisense о том, чтобы положить там (в VS2015), так что вы должны сделать немного покопаться, чтобы получить действительные перечисления.

С .NET 4.5, допустимые для записи MouseAction являются:

  • LeftClick - левая кнопка мыши мыши.
  • LeftDoubleClick - левая кнопка мыши двойной щелчок.
  • MiddleClick - средний кнопка мыши клик.
  • MiddleDoubleClick - средний кнопка мыши двойной щелчок.
  • Нет - никаких действий.
  • RightClick - щелкните правой кнопкой мыши.
  • RightDoubleClick - щелкнуть правой кнопкой мыши.
  • WheelClick - вращение колеса мыши.

Константы, показанные выше, взяты из MSDN.

+0

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

+0

Спасибо за предложение @BenjaminW. Это мой первый ответ в сообществе :-) – Praveen

+0

@Praveen, хороший ответ. Это было именно то, что мне нужно. Я отредактировал ваш ответ, чтобы добавить больше описаний и советов по использованию. – Stewbob

Смежные вопросы