You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:45:59