65.9K
CodeProject 正在变化。 阅读更多。
Home

WPF 中的波斯语日记

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (49投票s)

2009年2月12日

CPOL

2分钟阅读

viewsIcon

141905

downloadIcon

5734

使用波斯日记,您可以在波斯日历中导航并存储您的备忘录

Persian Calendar in WPF

引言

使用此软件,您可以浏览波斯日历,并且可以为每一天添加您的备忘录。

Using the Code

我使用 .NET Framework 3.5 SP1 创建了这个项目,所以您需要安装它才能使用这个项目。
我还使用了一个 SQL 数据库 (mdf) 来存储数据,所以您至少需要安装 SQL Express 2008

创建用户界面

创建像这样的软件 UI 的最佳方法是使用 Stack。

然后我们应该在 Stack 中使用 UniformGrids 和 Grids 来创建 UI。
例如,上图中 1 的 XAML 代码是

<StackPanel x:Name="stackPanel">
    <StackPanel.BitmapEffect>
        <BlurBitmapEffect Radius="0"/>
    </StackPanel.BitmapEffect>
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Center" 
        x:Name="header" MinHeight="70">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.135*"/>
            <ColumnDefinition Width="0.102*"/>
            <ColumnDefinition Width="0.494*"/>
            <ColumnDefinition Width="0.14*"/>
            <ColumnDefinition Width="0.129*"/>
        </Grid.ColumnDefinitions>
        <TextBlock FlowDirection="RightToLeft" Language="fa-ir" 
            FontSize="36" x:Name="TextBlockThisMonth" HorizontalAlignment="Center" 
            Grid.Column="2" VerticalAlignment="Center" Margin="0,0,0,0" 
            FontFamily="Arial">تاریخ</TextBlock>

        <Button x:Name="previousMonth" Content=" ماه قبل &gt; " 
            Grid.Column="3" VerticalAlignment="Center" Click="previousMonth_Click" 
            HorizontalAlignment="Center" />
        <Button x:Name="nextMonth" Content=" &lt; ماه بعد " Grid.Column="1" 
            HorizontalAlignment="Center" VerticalAlignment="Center" 
            Click="nextMonth_Click" />

        <Button x:Name="previousYear" Content=" سال قبل &gt;&gt; " 
            Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Center" 
            Click="previousYear_Click" />
        <Button x:Name="nextYear" Content=" &lt;&lt; سال بعد " 
            HorizontalAlignment="Center"  Click="nextYear_Click" 
            VerticalAlignment="Center"  />

    </Grid>
    <UniformGrid Columns="7" Rows="1" x:Name="dayNames" MinHeight="30">
        <Grid>
            <Rectangle Style="{DynamicResource RectangleStyleForHolydays}"/>
            <TextBlock HorizontalAlignment="Center" 
            VerticalAlignment="Center"><Run FlowDirection="RightToLeft" 
            Language="fa-ir" Text="جمعه"/></TextBlock>
        </Grid>
        <Grid>
            <Rectangle Style="{DynamicResource RectangleStyle1}"/>
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
            FontSize="14"><Run FlowDirection="RightToLeft" Language="fa-ir" 
            Text="پنج شنبه"/></TextBlock>
        </Grid>
        <Grid>
            <Rectangle Style="{DynamicResource RectangleStyle1}"/>
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
            FontSize="14"><Run FlowDirection="RightToLeft" Language="fa-ir" 
            Text="چهار شنبه"/></TextBlock>
        </Grid>
        <Grid>
            <Rectangle Style="{DynamicResource RectangleStyle1}"/>
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
            FontSize="14"><Run FlowDirection="RightToLeft" Language="fa-ir" 
            Text="سه شنبه"/></TextBlock>
        </Grid>
        <Grid>
            <Rectangle Style="{DynamicResource RectangleStyle1}"/>
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
            FontSize="14"><Run FlowDirection="RightToLeft" Language="fa-ir" 
            Text="دو شنبه"/></TextBlock>
        </Grid>
        <Grid>
            <Rectangle Style="{DynamicResource RectangleStyle1}"/>
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
            FontSize="14"><Run FlowDirection="RightToLeft" Language="fa-ir" 
            Text="یک شنبه"/></TextBlock>
        </Grid>
        <Grid>
            <Rectangle Style="{DynamicResource RectangleStyle1}" />
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
            FontSize="14"><Run FlowDirection="RightToLeft" Language="fa-ir" 
            Text="شنبه"/></TextBlock>
        </Grid>
    </UniformGrid>
    <!-- *********************************************************** -->
    (The XAML of 2)
     .
    .
    .
</StackPanel>

上图中 2 的 XAML 代码是

<UniformGrid Columns="7" Rows="1" Margin="0,10,0,0" 
	x:Name="calendarRow01" MinHeight="80">
    <Grid x:Name="GridJome0" Style="{DynamicResource GridStyle}">
        <Rectangle x:Name="RectangleJome0" 
			Style="{DynamicResource RectangleStyleForHolydays}" />
        <TextBlock x:Name="TextBlockJome0Miladi" 
        	Style="{DynamicResource TextBlockStyle6}">08 Dec</TextBlock>
        <TextBlock x:Name="TextBlockJome0Hijri" 
        	Style="{DynamicResource TextBlockStyle10}">۰۱ محرم</TextBlock>
        <TextBlock x:Name="TextBlockJome0" 
        	Style="{DynamicResource TextBlockStyle1}">جمعه</TextBlock>
    </Grid>
    <Grid x:Name="Grid5Shanbe0" Style="{DynamicResource GridStyle}">
        <Rectangle x:Name="Rectangle5Shanbe0" 
        	Style="{DynamicResource RectangleStyle2}" />
        <TextBlock x:Name="TextBlock5Shanbe0Miladi" Text="08 Dec" 
        	Style="{DynamicResource TextBlockStyle6}"/>
        <TextBlock x:Name="TextBlock5Shanbe0Hijri" Text="۰۱ محرم" 
        	Style="{DynamicResource TextBlockStyle10}"/>
        <TextBlock x:Name="TextBlock5Shanbe0" 
        	Style="{DynamicResource TextBlockStyle1}">پنج شنبه</TextBlock>
    </Grid>
    <Grid x:Name="Grid4Shanbe0" Style="{DynamicResource GridStyle}">
        <Rectangle x:Name="Rectangle4Shanbe0" 
        	Style="{DynamicResource RectangleStyle2}" />
        <TextBlock x:Name="TextBlock4Shanbe0Miladi" Text="08 Dec" 
        	Style="{DynamicResource TextBlockStyle6}"/>
        <TextBlock x:Name="TextBlock4Shanbe0Hijri" Text="۰۱ محرم" 
        	Style="{DynamicResource TextBlockStyle10}"/>
        <TextBlock x:Name="TextBlock4Shanbe0" 
        	Style="{DynamicResource TextBlockStyle1}">چهار شنبه</TextBlock>
    </Grid>
    <Grid x:Name="Grid3Shanbe0" Style="{DynamicResource GridStyle}">
        <Rectangle x:Name="Rectangle3Shanbe0" 
        	Style="{DynamicResource RectangleStyle2}" />
        <TextBlock x:Name="TextBlock3Shanbe0Miladi" Text="08 Dec" 
        	Style="{DynamicResource TextBlockStyle6}"/>
        <TextBlock x:Name="TextBlock3Shanbe0Hijri" Text="۰۱ محرم" 
        	Style="{DynamicResource TextBlockStyle10}"/>
        <TextBlock x:Name="TextBlock3Shanbe0" 
        	Style="{DynamicResource TextBlockStyle1}">سه شنبه</TextBlock>
    </Grid>
    <Grid x:Name="Grid2Shanbe0" Style="{DynamicResource GridStyle}">
        <Rectangle x:Name="Rectangle2Shanbe0" 
        	Style="{DynamicResource RectangleStyle2}" />
        <TextBlock x:Name="TextBlock2Shanbe0Miladi" Text="08 Dec" 
        	Style="{DynamicResource TextBlockStyle6}"/>
        <TextBlock x:Name="TextBlock2Shanbe0Hijri" Text="۰۱ محرم" 
        	Style="{DynamicResource TextBlockStyle10}"/>
        <TextBlock x:Name="TextBlock2Shanbe0" 
        	Style="{DynamicResource TextBlockStyle1}">دو شنبه</TextBlock>
    </Grid>
    <Grid x:Name="Grid1Shanbe0" Style="{DynamicResource GridStyle}">
        <Rectangle x:Name="Rectangle1Shanbe0" 
        	Style="{DynamicResource RectangleStyle2}" />
        <TextBlock x:Name="TextBlock1Shanbe0Miladi" 
        	Style="{DynamicResource TextBlockStyle6}" Text="08 Dec" Margin="0,0,10,5"/>
        <TextBlock x:Name="TextBlock1Shanbe0Hijri" 
        	Style="{DynamicResource TextBlockStyle10}" Text="۰۱ محرم" />
        <TextBlock x:Name="TextBlock1Shanbe0" 
        	Style="{DynamicResource TextBlockStyle1}">یک شنبه</TextBlock>
    </Grid>
    <Grid x:Name="GridShanbe0"  Style="{DynamicResource GridStyle}">
        <Rectangle x:Name="RectangleShanbe0" 
        	Style="{DynamicResource RectangleStyle2}" />
        <TextBlock x:Name="TextBlockShanbe0" 
        	Style="{DynamicResource TextBlockStyle1}" >شنبه</TextBlock>
        <TextBlock x:Name="TextBlockShanbe0Miladi" Text="08 Dec"  
        	Style="{DynamicResource TextBlockStyle6}"/>
        <TextBlock x:Name="TextBlockShanbe0Hijri" Text="۰۱ محرم" 
        	Style="{DynamicResource TextBlockStyle10}"/>
    </Grid>
</UniformGrid>

上图中 3 的 XAML 代码是
<Grid x:Name="Grid5Shanbe0" Style="{DynamicResource GridStyle}">
    <Rectangle x:Name="Rectangle5Shanbe0" 
    	Style="{DynamicResource RectangleStyle2}" />
    <TextBlock x:Name="TextBlock5Shanbe0Miladi" Text="08 Dec" 
    	Style="{DynamicResource TextBlockStyle6}"/>
    <TextBlock x:Name="TextBlock5Shanbe0Hijri" Text="۰۱ محرم" 
    	Style="{DynamicResource TextBlockStyle10}"/>
    <TextBlock x:Name="TextBlock5Shanbe0" 
    	Style="{DynamicResource TextBlockStyle1}">پنج شنبه</TextBlock>
</Grid>

上图中 4 的 XAML 代码是

<Grid x:Name="footer" MinHeight="70">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.121*"/>
        <ColumnDefinition Width="0.132*"/>
        <ColumnDefinition Width="0.07*"/>
        <ColumnDefinition Width="0.119*"/>
        <ColumnDefinition Width="0.3*"/>
        <ColumnDefinition Width="0.084*"/>
        <ColumnDefinition Width="0.064*"/>
        <ColumnDefinition Width="0.11*"/>
    </Grid.ColumnDefinitions>

    <Button x:Name="goToToday" Content="  پرش به امروز  " 
    	Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" 
        Click="goToToday_Click"  />

    <WindowsFormsHost Grid.Column="0" FontSize="13" VerticalAlignment="Center" 
    	HorizontalAlignment="Center" Width="70" Height = "25">
        <wf:MaskedTextBox Text="سال"  x:Name="textBoxYear" Mask="0000"/>
    </WindowsFormsHost>

    <ComboBox Grid.Column="1" FontSize="13" HorizontalAlignment="Center" 
    	VerticalAlignment="Center" IsSynchronizedWithCurrentItem="True" 
        	Width="85" x:Name="comboBoxMonths">
        <ComboBoxItem Content="فروردین" IsSelected="True"/>
        <ComboBoxItem Content="اردیبهشت"/>
        <ComboBoxItem Content="خرداد"/>

        <ComboBoxItem Content="تیر"/>
        <ComboBoxItem Content="مرداد"/>
        <ComboBoxItem Content="شهریور"/>

        <ComboBoxItem Content="مهر"/>
        <ComboBoxItem Content="آبان"/>
        <ComboBoxItem Content="آذر"/>

        <ComboBoxItem Content="دی"/>
        <ComboBoxItem Content="بهمن"/>
        <ComboBoxItem Content="اسفند"/>
    </ComboBox>

    <Button x:Name="goToDate" Content="  برو  " Grid.Column="2" 
    	VerticalAlignment="Center" HorizontalAlignment="Center" 
        Click="goToDate_Click" />
    <TextBlock Text="تنظیم ماه قمری" Grid.Column="7" HorizontalAlignment="Center" 
    	VerticalAlignment="Center"/>
    <TextBox x:Name="TextBoxHijriAdjustment" Text="" Grid.Column="6" 
    	HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="30" />
    <Button x:Name="ButttonHijriAdjustment" Content="  تنظیم  " 
    	Grid.Column="5" HorizontalAlignment="Center" VerticalAlignment="Center" 
        Click="ButttonHijriAdjustment_Click"  />
        
</Grid>

我还创建了几个 Storyboard 来显示和隐藏下面的面板。
这个面板使用您的输入数据更新数据库。

Storyboard 的 XAML 如下所示

<Storyboard x:Key="showEventGrid">
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="EventGrid" 
    	Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00" 
        Value="{x:Static Visibility.Visible}"/>
        <DiscreteObjectKeyFrame KeyTime="00:00:00.5000000" 
        Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
    	Storyboard.TargetName="EventGrid" 
        Storyboard.TargetProperty="(UIElement.Opacity)">
        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
    <ThicknessAnimationUsingKeyFrames BeginTime="00:00:00" 
    	Storyboard.TargetName="EventGrid" Storyboard.TargetProperty
        	="(FrameworkElement.Margin)">
        <SplineThicknessKeyFrame KeyTime="00:00:00" Value="0,0,0,0"/>
        <SplineThicknessKeyFrame KeyTime="00:00:00.5000000" Value="0,0,0,0"/>
    </ThicknessAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
    	Storyboard.TargetName="stackPanel" 
        Storyboard.TargetProperty="(UIElement.BitmapEffect)
        	.(BlurBitmapEffect.Radius)">
        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="6"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="hideEventGrid">
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" 
    	Storyboard.TargetName="EventGrid" 
        Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00.5000000" 
        Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
    	Storyboard.TargetName="EventGrid" 
		Storyboard.TargetProperty="(UIElement.Opacity)">
        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
    	Storyboard.TargetName="stackPanel" 
        Storyboard.TargetProperty="(UIElement.BitmapEffect).(BlurBitmapEffect.Radius)">
        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <ThicknessAnimationUsingKeyFrames BeginTime="00:00:00" 
    	Storyboard.TargetName="EventGrid" 
        Storyboard.TargetProperty="(FrameworkElement.Margin)">
        <SplineThicknessKeyFrame KeyTime="00:00:00.5000000" Value="0,0,0,0"/>
    </ThicknessAnimationUsingKeyFrames>
</Storyboard>

C# 代码

在波斯日历中,我们有 12 个月,我已在以下代码段中显示

//Season { MonthName(nomber of days in the month) ...}
Spring { Farvardin(31), OrdiBehesht(31), Khordad(31) }
Summer { Tir(31), Mordad(31), Shahrivar(31) }
Autumn { Mehr(30), Aban(30), Azar(30) }
Winter { Day(30), Bahman(30), Esfand(30 or 29) }

幸运的是,.NET 中有一个用于创建波斯日历的类,我使用了它。

PersianCalendar persianCalendar = new PersianCalendar();

此项目中创建波斯月份的主要方法是 calculateMonth

/// <summary>
/// The main method to show the calendar
/// This method shows `thisMonth` in `thisYear`
/// </summary>
void calculateMonth(int thisYear, int thisMonth)
{
    try
    {
        yearForNavigating = thisYear;
        monthForNavigating = thisMonth;

        DateTime tempDateTime = persianCalendar.ToDateTime(yearForNavigating, 
        	monthForNavigating, 15, 01, 01, 01, 01);

        int thisDay = 1;
        TextBlockThisMonth.Text = "";
        TextBlockThisMonth.Text =
            monthForNavigating.convertToPersianMonth() + " " +
            yearForNavigating.convertToPersianNumber();

        //Different between first place of calendar and first place of this month
        //اختلاف بین خانه شروع ماه و اولین خانه تقویم            
        string DayOfWeek = persianCalendar.GetDayOfWeek(persianCalendar.
        	ToDateTime(thisYear, thisMonth, 01, 01, 01, 01, 01)).ToString();
        int span = calculatePersianSpan(DayOfWeek.convertToPersianDay());

        decreasePersianDay(ref thisYear, ref thisMonth, ref thisDay, span);

        string persianDate;//حاوی تاریخ روزهای شمسی Contains the date of Persian
        string miladiDate;//حاوی تاریخ روزهای میلادی Contains the date of Christian
        string hijriDate;//حاوی تاریخ روزهای قمری Contains the date of Hijri

        string tooltip_context = "";//Contains the text of tooltip

        ////////////////////////////////////

        for (int i = 0; i < 6 * 7; i++)
        {
            tempDateTime = persianCalendar.ToDateTime(thisYear, thisMonth, 
            	thisDay, 01, 01, 01, 01);

            miladiDate = tempDateTime.Day.ToString() + " " + 
            	englishMonthName(tempDateTime.Month) 
            	+ " " + tempDateTime.Year.ToString();
            hijriDate = hijriCalendar.GetDayOfMonth
		(tempDateTime).convertToPersianNumber() 
                + " " + hijriCalendar.GetMonth
			(tempDateTime).convertToHigriMonth() + " " 
                + hijriCalendar.GetYear(tempDateTime).convertToPersianNumber();
            persianDate = thisDay.convertToPersianNumber();

            DayOfWeek = persianCalendar.GetDayOfWeek(tempDateTime).ToString();

            if (thisMonth == monthForNavigating)
            {
                tooltip_context = "";
                if (thisDay == currentDay && thisMonth == currentMonth && 
                	thisYear == currentYear)//بررسی تاریخ امروز
                {
                    tooltip_context = GetTextOfMemo
			(thisYear, thisMonth, thisDay, "Shamsi");
                    if (tooltip_context == "")
                        tooltip_context = GetTextOfMemo(tempDateTime.Year, 
                        	tempDateTime.Month, 
                        	tempDateTime.Day, "Miladi");
                    if (tooltip_context == "")
                        tooltip_context = GetTextOfMemo
				(hijriCalendar.GetYear(tempDateTime), 
                        	hijriCalendar.GetMonth(tempDateTime), 
                            	hijriCalendar.GetDayOfMonth(tempDateTime), "Hijri");

                    if (DayOfWeek.convertToPersianDay() == "جمعه")//بررسی جمعه بودن روز
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyleForHolydays_CurrentDay", "TextBlockStyle3", 
                            "TextBlockStyle12", "TextBlockStyle8", tooltip_context);
                    else
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyleToday", 
			"TextBlockStyle5", "TextBlockStyle10", 
                            "TextBlockStyle6", tooltip_context);
                }
                else if (searchShamsiTable(thisYear, thisMonth, thisDay))
                {
                    tooltip_context = GetTextOfMemo
			(thisYear, thisMonth, thisDay, "Shamsi");
                    if (isHoliday(thisYear, thisMonth, thisDay, "Shamsi"))
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyle5", "TextBlockStyle3", "TextBlockStyle12", 
                            "TextBlockStyle8", tooltip_context);
                    else
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyle4", "TextBlockStyle1", "TextBlockStyle10", 
                        	"TextBlockStyle6", tooltip_context);
                }
                else if (searchHijriTable(hijriCalendar.GetYear(tempDateTime), 
                	hijriCalendar.GetMonth(tempDateTime), 
                    hijriCalendar.GetDayOfMonth(tempDateTime)))
                {
                    tooltip_context = GetTextOfMemo
					(hijriCalendar.GetYear(tempDateTime), 
                    	hijriCalendar.GetMonth(tempDateTime), hijriCalendar.
                        GetDayOfMonth(tempDateTime), "Hijri");
                    if (isHoliday(thisYear, thisMonth, thisDay, "Hijri"))
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyle5", "TextBlockStyle3", "TextBlockStyle12", 
                            "TextBlockStyle8", tooltip_context);
                    else
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyle4", "TextBlockStyle5", "TextBlockStyle10", 
                            "TextBlockStyle6", tooltip_context);
                }
                else if (searchMiladiTable(tempDateTime.Year, tempDateTime.Month, 
                	tempDateTime.Day))
                {
                    tooltip_context = GetTextOfMemo
			(tempDateTime.Year, tempDateTime.Month, 
                    	tempDateTime.Day, "Miladi");
                    if (isHoliday(thisYear, thisMonth, thisDay, "Miladi"))
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyle5", "TextBlockStyle3", "TextBlockStyle12", 
                            "TextBlockStyle8", tooltip_context);
                    else
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyle4", "TextBlockStyle5", "TextBlockStyle10", 
                        	"TextBlockStyle6", tooltip_context);
                }
                else
                {
                    if (DayOfWeek.convertToPersianDay() == 
					"جمعه")//بررسی جمعه بودن روز
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyleForHolydays", "TextBlockStyle3", 
                            "TextBlockStyle12", 
                            "TextBlockStyle8", tooltip_context);
                    else
                        changeProperties(i, persianDate, hijriDate, miladiDate, 
                        	"RectangleStyle2", "TextBlockStyle5", "TextBlockStyle10", 
                            "TextBlockStyle6", tooltip_context);
                }
            }
            else
            {
                if (DayOfWeek.convertToPersianDay() == "جمعه")//بررسی جمعه بودن روز
                    changeProperties(i, persianDate, hijriDate, miladiDate, 
                    	"RectangleStyleForOtherHolydays", "TextBlockStyle4", 
                        "TextBlockStyle13", "TextBlockStyle9", tooltip_context);
                else
                    changeProperties(i, persianDate, hijriDate, miladiDate, 
                    	"RectangleStyle3", 
                    	"TextBlockStyle2", "TextBlockStyle11", "TextBlockStyle7", 
                        tooltip_context);
            }

            increasePersianDay(ref thisYear, ref thisMonth, ref thisDay, 1);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Exception", MessageBoxButton.OK, 
        	MessageBoxImage.Error);
    }
}

然后我使用 LINQ 来更新数据库。
首先,我添加了一个 LINQ to SQL

然后我设计了 DataClasses1.dbml

然后我们可以使用 LINQ 查询轻松更新数据库。
例如,我编写了这个方法来搜索 shamsi 表。

/// <summary>
/// Searches the Database shamsi table
/// </summary>
/// <returns>If the input data is found in the table return true, else 
/// return false</returns>
bool searchShamsiTable(int year, int month, int day)
{
    bool result = false;
    try
    {
        int? id = null;
        id = (from q in db.shamsis
              where (q.year == year && q.day == day && q.month == month) 
              	|| (q.anniversary == true && q.month == month && q.day == day)
              select q.id).First();
        if (id != null) result = true;
    }
    catch { result = false; }
    return result;
} 

有关 LINQ to SQL 的更多信息可以在 这里 找到。
其他方法都很简单易学,我用一些注释解释了它们。

看点

这个项目中我感兴趣的一点是,在 WPF 中使用 WinForm 控件。
我使用 WinForm Masked TextBox 来输入年份。

为了在 WPF 应用程序中使用 WinForm Masked TextBox:我将这些 DLL 添加到我的引用中

  • WindowsFormsIntegration.dll
  • System.Windows.Forms.dll

然后我在 XAML 源代码中的 Window 标签内添加了以下行

xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

最后,我使用 WindowsFormsHost 标签将 MaskedTextBox 控件添加到我的 WPF 应用程序中。
<WindowsFormsHost Grid.Column="0" FontSize="13" 
	VerticalAlignment="Center" HorizontalAlignment="Center" 
    Width="70" Height = "25">
	<wf:MaskedTextBox x:Name="textBoxYear" Mask="0000"/>
</WindowsFormsHost>

有关 WindowsFormHost 的更多信息可以在 这里 找到。

历史

  • 2009 年 2 月 12 日:第一篇帖子
  • 2010 年 1 月 6 日:数据库已更改为 XML 文件,并且已解决了一些错误。
© . All rights reserved.