WPF+Caliburn.Micro:如何提取可复用Action到资源实现按钮复用?
WPF+Caliburn.Micro 复用按钮Input触发器方案
1. 定义可复用的触发器样式资源
在窗口或资源字典中,把Interaction.Triggers的触发逻辑封装成Button样式,绑定ViewModel的Input方法并自动传递按钮Content作为参数:
<Window.Resources> <!-- 用Caliburn.Micro原生语法,自动关联方法 --> <Style x:Key="CalcButtonStyle" TargetType="Button"> <Setter Property="cal:Message.Attach" Value="[Event Click] = [Action Input($this.Content)]" /> </Style> <!-- 或者用Microsoft.Xaml.Behaviors的写法,需手动定义命令 --> <!-- <Style x:Key="CalcButtonStyle" TargetType="Button"> <Setter Property="behaviors:Interaction.Triggers"> <Setter.Value> <behaviors:EventTrigger EventName="Click"> <behaviors:InvokeCommandAction Command="{Binding InputCommand}" CommandParameter="{Binding Content, RelativeSource={RelativeSource Self}}" /> </behaviors:EventTrigger> </Setter.Value> </Setter> </Style> --> </Window.Resources>
2. 按钮简洁引用资源
所有需要触发Input方法的按钮,只需引用这个样式即可,无需重复编写触发器:
<Button Style="{StaticResource CalcButtonStyle}" Content="1" /> <Button Style="{StaticResource CalcButtonStyle}" Content="+" /> <Button Style="{StaticResource CalcButtonStyle}" Content="=" />
3. ViewModel对应处理逻辑
确保ViewModel中存在统一的Input方法:
// 对应Caliburn.Micro原生语法的实现 public void Input(string content) { // 这里写输入处理逻辑,比如拼接表达式、执行计算等 } // 对应Microsoft.Xaml.Behaviors的实现,需先定义命令 public ICommand InputCommand { get; } public YourViewModel() { InputCommand = new RelayCommand<string>(Input); } private void Input(string content) { // 输入处理逻辑 }
内容的提问来源于stack exchange,提问作者huojian
相关产品推荐
相关产品推荐

