WPF Prism框架

Prism框架
1官脓、關(guān)于Prism框架
    官方地址:http://prismlibrary.com

    官方源碼:https://github.com/PrismLibrary/Prism

    版本:8.1
2哗蜈、功能說明
    Prism提供了一組設(shè)計(jì)模式的實(shí)現(xiàn)野建,有助于編寫結(jié)構(gòu)良好的可維護(hù)XAML應(yīng)用程序。

    包括MVVM  依賴注入  命令  事件聚合器

    Prism減重

    Autofac   恬叹、Dryloc 、 Mef  同眯、Niniject 绽昼、StruyctureMap、Unity须蜗。

3硅确、Prism的關(guān)鍵程序

    Prism.Core  實(shí)現(xiàn)MVVM的核心功能,屬于一個(gè)與平臺(tái)無關(guān)的項(xiàng)目明肮。

    Prism.Wpf  包含了DialogService【彈窗】  Region【注冊(cè)】  Module 【模塊】 Navigation【導(dǎo)航】  其他的一些WPF 功能菱农。

    Prism.Unity  Prism.Unity.Wpf.dll    Prism.Dryloc.Wpf.dll

4、獲取Prism框架

    Prism.dll  Prism.core

    Prism.Wpf.dll  Prism.Wpf

    Prism.Unity.Wpf.dll    Prism.Unity

    Prism.Dryloc.Wpf.dll  Prism.Dryloc 

5柿估、數(shù)據(jù)處理循未,數(shù)據(jù)通知的五種方式

 新建類:MainViewModel  繼承:BindableBase
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;

namespace WpfApp2
{
    public class MainViewModel : BindableBase
    {
        private int _value = 100;
        public int Value
        {
            get { return _value; }
            set
            {
                //通知的五種方式
                //第一種方式
                //SetProperty(ref _value, value);  
                //第二種方式
                //this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("Value"));
                //第三種方式
                //this.RaisePropertyChanged();
                //第四種方式   Value :可以通知其他屬性  
                SetProperty(ref _value, value, "Value");
                //第五種方式
                SetProperty(ref _value, value, OnPropertyChanged);
            }
        }
        public void OnPropertyChanged()
        {

        }
        public MainViewModel()
        {
        }
    }
}

xaml代碼:

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel></local:MainViewModel>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <TextBlock Text="{Binding Value}"></TextBlock>
        </StackPanel>
    </Grid>
</Window>

6、行為處理

   1秫舌、Prism的行為處理

         DelegateCommand 

            基本用法 :

新建類:MainViewModel 繼承 BindableBase

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
    public class MainViewModel:BindableBase
    {
        private string _value = "Hellow  Word!";
         public ICommand BtnCommand { get => new DelegateCommand(doExecute); } 
        public string  Value
        {
            get { return _value; }
            set {  
                SetProperty(ref _value, value); 
            }
        }
        public MainViewModel() 
        {
             
        }

        public void doExecute() 
        {
            this.Value = "Fuck You!";
        }
      
    }
}

            檢查狀態(tài)

第一種檢查狀態(tài):

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
    public class MainViewModel:BindableBase
    {
        private string _value = "Hellow  Word!";
       
         public DelegateCommand BtncheckCommand { get; }
        public string  Value
        {
            get { return _value; }
            set {  
                SetProperty(ref _value, value);
                 //觸發(fā)命令相關(guān)的可執(zhí)行的檢查邏輯 
                BtncheckCommand.RaiseCanExecuteChanged();
            }
        }
        public MainViewModel() 
        {
            BtncheckCommand = new DelegateCommand(doExecute,doCheckExecute);
        }

        public void doExecute() 
        {
            this.Value = "Fuck You!";
        }
        public bool doCheckExecute()
        {
            return this.Value == "Hellow  Word!";
        }
    }
}

第二種檢查狀態(tài):

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
    public class MainViewModel:BindableBase
    {
        private string _value = "Hellow  Word!";
       
         public DelegateCommand BtncheckCommand { get; }
        public string  Value
        {
            get { return _value; }
            set {  
                SetProperty(ref _value, value); 
            }
        }
        public MainViewModel() 
        {
            //ObservesProperty : 監(jiān)聽一個(gè)屬性的變化的妖,當(dāng)這個(gè)屬性值發(fā)生變化后绣檬,進(jìn)行狀態(tài)檢查
            //當(dāng)Value發(fā)生變化的時(shí)候主動(dòng)去觸發(fā)一個(gè)狀態(tài)檢查
            //可以監(jiān)聽多個(gè)屬性  后面.ObservesProperty(()=>Value)
            BtncheckCommand = new DelegateCommand(doExecute, doCheckExecute).ObservesProperty(()=>Value); 
        } 吧
        public void doExecute() 
        {
            this.Value = "Fuck You!";
        }
        public bool doCheckExecute()
        {
            return this.Value == "Hellow  Word!";
        }
    }
} 

第三種檢查方式:

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
    public class MainViewModel:BindableBase
    {
        private string _value = "Hellow  Word!";
         public ICommand BtnCommand { get => new DelegateCommand(doExecute); }
         public DelegateCommand BtncheckCommand { get; }
        public string  Value
        {
            get { return _value; }
            set {  
                SetProperty(ref _value, value); 
            }
        }
        private bool _state;

        public bool State
        {
            get { return Value == "Hellow  Word!"; }
            set {
                SetProperty(ref _state, value); 
            }
        }

        public MainViewModel() 
        { 
             //第三種檢查方式  通過  ObservesCanExecute  進(jìn)行一個(gè)屬性值觀察,進(jìn)行動(dòng)態(tài)的狀態(tài)處理
             BtncheckCommand = new DelegateCommand(doExecute).ObservesCanExecute(() => State);
        }

        public void doExecute() 
        {
            this.Value = "Fuck You!";
            this.State =!this.State;
        } 
    }
}

xaml代碼:

<Window x:Class="WpfApp4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp4"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel></local:MainViewModel>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <TextBlock Text="{Binding Value}"></TextBlock>
            <Button Content="基本命令" Height="30" Command="{Binding BtnCommand}"></Button>
            <Button Content="屬性檢查命令" Height="30" Command="{Binding BtncheckCommand}"></Button>
        </StackPanel>
    </Grid>
</Window>
            
            異步處理 
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace WpfApp4
{
    public class MainViewModel:BindableBase
    {
        private string _value = "Hellow  Word!"; 
        public ICommand BtnAsyncCommand { get => new DelegateCommand(doExecuteAsync); } 
         public DelegateCommand BtncheckCommand { get; }
        public string  Value
        {
            get { return _value; }
            set {  
                SetProperty(ref _value, value); 
            }
        }
      

        public MainViewModel() 
        {
       
        }

 
        public async void doExecuteAsync() 
        {
            await Task.Delay(5000);
            this.Value = "再見嫂粟!";
        }
    }
}

xaml代碼:

<Window x:Class="WpfApp4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp4"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel></local:MainViewModel>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <TextBlock Text="{Binding Value}"></TextBlock> 
            <Button Content="異步命令" Height="30" Command="{Binding BtnAsyncCommand}"></Button>
        </StackPanel>
    </Grid>
</Window>

            泛型參數(shù)
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace WpfApp4
{
    public class MainViewModel:BindableBase
    {
        private string _value = "Hellow  Word!"; 
        public ICommand BtnAsyncCommand { get => new DelegateCommand<string>(doExecuteAsync); }

         public DelegateCommand BtncheckCommand { get; }
        public string  Value
        {
            get { return _value; }
            set {  
                SetProperty(ref _value, value);
                //觸發(fā)命令相關(guān)的可執(zhí)行的檢查邏輯
               // BtncheckCommand.RaiseCanExecuteChanged();
            }
        }
         
        public async void doExecuteAsync(string str) 
        {
            await Task.Delay(5000);
            this.Value = str;
        }
    }
}

xaml代碼:

<Window x:Class="WpfApp4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp4"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel></local:MainViewModel>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <TextBlock Text="{Binding Value}"></TextBlock> 
            <Button Content="異步命令" Height="30" Command="{Binding BtnAsyncCommand}" CommandParameter="再見"></Button>
        </StackPanel>
    </Grid>
</Window>

    事件命令 [事件轉(zhuǎn)命令] InvokeCommandAction

    新建類:MainViewModel:BindableBase
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace WpfApp4
{
    public class MainViewModel:BindableBase
    { 
        public ICommand BtnEventCommand { get => new DelegateCommand<object>(doEventExecute); } 
        public void doEventExecute(object args) 
        {
        
        }
    }
}

xaml代碼:

<Window x:Class="WpfApp4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:local="clr-namespace:WpfApp4"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel></local:MainViewModel>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <TextBlock Text="{Binding Value}"></TextBlock>
            <Button Content="基本命令" Height="30" Command="{Binding BtnCommand}"></Button>
            <Button Content="屬性檢查命令" Height="30" Command="{Binding BtncheckCommand}"></Button>
            <Button Content="異步命令" Height="30" Command="{Binding BtnAsyncCommand}" CommandParameter="再見"></Button>

            <ComboBox  SelectedIndex="0">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="SelectionChanged">
                        <prism:InvokeCommandAction Command="{Binding BtnEventCommand}"
                                                   TriggerParameterPath=""></prism:InvokeCommandAction>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
                <ComboBoxItem Content="111"></ComboBoxItem>
                <ComboBoxItem Content="222"></ComboBoxItem>
                <ComboBoxItem Content="333"></ComboBoxItem>
                <ComboBoxItem Content="444"></ComboBoxItem>
            </ComboBox>
        </StackPanel>
    </Grid>
</Window> 
備注:
頂部引用兩個(gè)命名空間:
  xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
  xmlns:prism="http://prismlibrary.com/"
   Prism框架引用初始化

        PrismBootstrapper 啟動(dòng)器

        1娇未、新建Startup 類,繼承:PrismBootstrapper
using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;

namespace WpfApp5
{
    public class Startup : PrismBootstrapper
    {  
        /// <summary>
        /// 返回一個(gè)Shell  :主窗口
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        protected override DependencyObject CreateShell()
        {
            throw new NotImplementedException();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="containerRegistry"></param>
        /// <exception cref="NotImplementedException"></exception>
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            throw new NotImplementedException();
        }
    }
}

2星虹、將App.xaml代碼注釋

<Application x:Class="WpfApp5.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp5">
             <!--StartupUri="MainWindow.xaml"   注釋掉-->  
    <Application.Resources>
         
    </Application.Resources>
</Application>

3零抬、在App.xaml.cs 構(gòu)造函數(shù)中啟動(dòng)

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp5
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public App()
        {
            new Startup().Run();
        }
    }
}

用 PrismApplication 啟動(dòng)器

修改App.xaml代碼

<prism:PrismApplication 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"
             xmlns:prism="http://prismlibrary.com/">
             <!--StartupUri="MainWindow.xaml"  注釋掉-->
    <Application.Resources>
         
    </Application.Resources>
</prism:PrismApplication>
備注: 引用    xmlns:prism="http://prismlibrary.com/" 
       將頭尾標(biāo)簽改為 :prism:PrismApplication 

App.xaml.cs 繼承 PrismApplication,代碼

using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : PrismApplication
    {
        /// <summary>
        /// 返回一個(gè)shell 【窗口】
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        protected override Window CreateShell()
        {
             return Container.Resolve<MainWindow>();    
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
             
        }
    }
}

基于Prism框架的登錄跳轉(zhuǎn)

App.xaml代碼:

<prism:PrismApplication 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"
             xmlns:prism="http://prismlibrary.com/"
                        >
             <!--StartupUri="MainWindow.xaml"-->
    <Application.Resources>
         
    </Application.Resources>
</prism:PrismApplication>

App.xaml.cs代碼:

using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : PrismApplication
    {
        /// <summary>
        /// 返回一個(gè)shell 【窗口】
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }
        /// <summary>
        /// 初始化 shell  主窗口
        /// </summary>
        /// <param name="shell"></param>
        protected override void InitializeShell(Window shell)
        {
            var loginWindow = Container.Resolve<Login>();
            if (loginWindow == null || loginWindow.ShowDialog() == false)
            {
                Application.Current.Shutdown();
            }
        }
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {

        }
    }
}

登錄代碼:Login.xaml
<Window x:Class="WpfApp1.Login"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="Login" Height="450" Width="800">
    <Grid>
        <Button Click="Button_Click"></Button>
    </Grid>
</Window>

Login.xaml.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace WpfApp1
{
    /// <summary>
    /// Login.xaml 的交互邏輯
    /// </summary>
    public partial class Login : Window
    {
        public Login()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }
    }
}

MainWindow.xaml 代碼:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>

    </Grid>
</Window>

ViewModelLocator對(duì)象 幫助進(jìn)行 View與ViewModel的綁定

標(biāo)準(zhǔn)狀態(tài):

        AutoWireViewModel宽涌,默認(rèn)行為true 

        ViewModel與視圖類型位于同一個(gè)程序集中

        ViewModel位于.ViewModel子命名空間中

        視圖位于.Views子命名空間中

        ViewModel名稱與視圖名稱對(duì)應(yīng) 平夜,以“ViewModel”結(jié)尾

 實(shí)例代碼如下:

  新建子文件夾:ViewModels/MainWindowViewModel  類,代碼如下:
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;

namespace WpfApp6.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private string _value = "  Hellow Word";

        public string Value
        {
            get { return _value; }
            set
            {
                SetProperty(ref _value, value);
            }
        }

    }
}

新建子文件夾护糖,Views/MainWindow.xaml褥芒,代碼如下:

<Window x:Class="WpfApp6.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:local="clr-namespace:WpfApp6.Views"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBlock Text="{Binding Value}"></TextBlock>
    </Grid>
</Window>

設(shè)置啟動(dòng)項(xiàng):

App.xaml,代碼如下:

<prism:PrismApplication x:Class="WpfApp6.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp6"
             xmlns:prism="http://prismlibrary.com/"
            >
    <Application.Resources>
         
    </Application.Resources>
</prism:PrismApplication>

App.xaml.cs嫡良,代碼如下:

using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp6
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : PrismApplication
    {
        protected override Window CreateShell()
        {
             return  Container.Resolve<Views.MainWindow>();   
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
             
        }
    }
}

目錄結(jié)構(gòu)圖如下:【新建的文件夾一定要符合 框架要求】


1646286093(1).jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锰扶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寝受,更是在濱河造成了極大的恐慌坷牛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件很澄,死亡現(xiàn)場(chǎng)離奇詭異京闰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)甩苛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蹂楣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讯蒲,你說我怎么就攤上這事痊土。” “怎么了墨林?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵赁酝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我旭等,道長(zhǎng)酌呆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任搔耕,我火速辦了婚禮隙袁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己藤乙,他們只是感情好猜揪,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坛梁,像睡著了一般而姐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上划咐,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天拴念,我揣著相機(jī)與錄音,去河邊找鬼褐缠。 笑死政鼠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的队魏。 我是一名探鬼主播公般,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼胡桨!你這毒婦竟也來了官帘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤昧谊,失蹤者是張志新(化名)和其女友劉穎刽虹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呢诬,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涌哲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尚镰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阀圾。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狗唉,靈堂內(nèi)的尸體忽然破棺而出稍刀,到底是詐尸還是另有隱情,我是刑警寧澤敞曹,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站综膀,受9級(jí)特大地震影響澳迫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜剧劝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一橄登、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦拢锹、人聲如沸谣妻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹋半。三九已至,卻和暖如春充坑,著一層夾襖步出監(jiān)牢的瞬間减江,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工捻爷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辈灼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓也榄,卻偏偏與公主長(zhǎng)得像巡莹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甜紫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容