App.xaml
<Application x:Class="WpfApp1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp1" > <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary> <local:HelloBootstrapper x:Key="bootstrapper" /> </ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
using Caliburn.Micro; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace WpfApp1 { public class HelloBootstrapper:BootstrapperBase { public HelloBootstrapper() { Initialize(); } protected override void OnStartup(object sender, StartupEventArgs e) { DisplayRootViewFor<ShellViewModel>(); } } }
HelloBootstrapper类
using Caliburn.Micro; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace WpfApp1 { public class HelloBootstrapper:BootstrapperBase { public HelloBootstrapper() { Initialize(); } protected override void OnStartup(object sender, StartupEventArgs e) { DisplayRootViewFor<ShellViewModel>(); } } }
ShellView.xaml
<UserControl x:Class="WpfApp1.ShellView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:cal="http://www.caliburnproject.org" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" d:DesignHeight="800" d:DesignWidth="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="50*"/> <RowDefinition Height="50*"/> <RowDefinition Height="50*"/> <RowDefinition Height="50*"/> <RowDefinition Height="10*"/> <RowDefinition Height="10*"/> </Grid.RowDefinitions> <StackPanel> <!--<RepeatButton Name="IncrementCount" Content="Up" Margin="15" VerticalAlignment="Top" />--> <!--<RepeatButton Content="Up" Margin="15" Grid.Row="3" VerticalAlignment="Top"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> --><!--<cal:ActionMessage MethodName="IncrementCount" />--><!-- <cal:ActionMessage MethodName="IncrementCount"> <cal:Parameter Value="1" /> </cal:ActionMessage> </i:EventTrigger> </i:Interaction.Triggers> </RepeatButton>--> <RepeatButton Content="Up" Margin="15" Grid.Row="3" VerticalAlignment="Top" cal:Message.Attach="[Event Click] = [Action IncrementCount]" Background="Red"/> <TextBlock Grid.Row="0" Name="Count" Margin="20" FontSize="150" VerticalAlignment="Center" HorizontalAlignment="Center" /> <TextBox Grid.Row="1" x:Name="Name"></TextBox> <Button Grid.Row="2" Height="40" x:Name="SayHello" Content="Click Me"></Button> <UniformGrid Grid.Row="3" VerticalAlignment="Bottom"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="50*"/> <ColumnDefinition Width="50*"/> <ColumnDefinition Width="50*"/> </Grid.ColumnDefinitions> </Grid> <Slider Name="Delta" Minimum="0" Maximum="5" Margin="15" /> <Button Name="IncrementCount" Content="Increment" Margin="15" /> </UniformGrid> </StackPanel> </Grid> </UserControl>
ShellView.xaml.cs这个文件是默认的
ShellViewModel
using Caliburn.Micro; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace WpfApp1 { public class ShellViewModel:PropertyChangedBase { string name; public string Name { get { return name; } set { name = value; NotifyOfPropertyChange(() => Name); NotifyOfPropertyChange(() => CanSayHello); } } public bool CanSayHello { get { return !string.IsNullOrWhiteSpace(Name); } } public void SayHello() { MessageBox.Show(string.Format("Hello{0}!", Name)); } private int _count = 50; public int Count { get { return _count; } set { _count = value; NotifyOfPropertyChange(() => Count); NotifyOfPropertyChange(() => CanIncrementCount); } } public void IncrementCount() { Count++; } public void IncrementCount(int delta) { Count += delta; } public bool CanIncrementCount { get { return Count < 100; } } } }