WPF自定义Window样式(2)

目录:

目录:

目录:

WPF自定义Window样式(1)

 WPF自定义Window样式(1)

 WPF自定义Window样式(1)

WPF自定义Window样式(2)

 WPF自定义Window样式(2)

 WPF自定义Window样式(2)

 

 

 

1. 引言

  1. 引言
  1. 引言

    WPF是制作界面的一大利器。最近在做一个项目,用的就是WPF。既然使用了WPF了,那么理所当然的,需要自定义窗体样式。所使用的代码是在网上查到的:原文链接。

  在上一篇中,介绍了如何建立自定义窗体。接下来,我们需要考虑将该自定义窗体基类放到类库中去,只有放到类库中,我们才能在其他地方去方便的引用该基类。

  在上一篇中,介绍了如何建立自定义窗体。接下来,我们需要考虑将该自定义窗体基类放到类库中去,只有放到类库中,我们才能在其他地方去方便的引用该基类。

      首先上原始源码。

  1. 创建类库
  1. 创建类库

2. 创建项目

  接上一篇的项目,先添加一个类库项目stonemqy.CustomWindow.Helpers。理所当然的,我们接下来需要把VisualStates、TransitioningContentControl、CustomWindow、Themes/Generic.xaml等文件放入类库中。此时,要注意添加如下引用:

  接上一篇的项目,先添加一个类库项目stonemqy.CustomWindow.Helpers。理所当然的,我们接下来需要把VisualStates、TransitioningContentControl、CustomWindow、Themes/Generic.xaml等文件放入类库中。此时,要注意添加如下引用:

       创建空白项目stonemqy.CustomWindow,添加WPF项目stonemqy.CustomWindow.Main。在stonemqy.CustomWindow.Main中添加文件夹Themes,并在其中添加资源字典Generic.xaml,注意这里的Themes文件夹和Generic.xaml资源字典的名字不可更改。并在项目下依次添加类VisualStates、TransitioningContentControl和CustomWindow。

    PresentationCor(4.0.0.0)

    PresentationCor(4.0.0.0)

3. VisualStates

    PresentationFramework(4.0.0.0)

    PresentationFramework(4.0.0.0)

using System.Diagnostics;
using System.Linq;
using System.Windows;
using System.Windows.Media;

namespace stonemqy.CustomWindow.Main
{
    public static class VisualStates
    {  /// <summary>
        /// This method tries to get the named VisualStateGroup for the 
        /// dependency object. The provided object's ImplementationRoot will be 
        /// looked up in this call.
        /// </summary>
        /// <param name="dependencyObject">The dependency object.</param>
        /// <param name="groupName">The visual state group's name.</param>
        /// <returns>Returns null or the VisualStateGroup object.</returns>
        public static VisualStateGroup TryGetVisualStateGroup(DependencyObject dependencyObject, string groupName)
        {
            FrameworkElement root = GetImplementationRoot(dependencyObject);
            if (root == null)
            {
                return null;
            }

            return VisualStateManager.GetVisualStateGroups(root)
                .OfType<VisualStateGroup>()
                .Where(group => string.CompareOrdinal(groupName, group.Name) == 0)
                .FirstOrDefault();
        }

        /// <summary>
        /// Gets the implementation root of the Control.
        /// </summary>
        /// <param name="dependencyObject">The DependencyObject.</param>
        /// <remarks>
        /// Implements Silverlight's corresponding internal property on Control.
        /// </remarks>
        /// <returns>Returns the implementation root or null.</returns>
        public static FrameworkElement GetImplementationRoot(DependencyObject dependencyObject)
        {
            Debug.Assert(dependencyObject != null, "DependencyObject should not be null.");
            return (1 == VisualTreeHelper.GetChildrenCount(dependencyObject)) ?
                VisualTreeHelper.GetChild(dependencyObject, 0) as FrameworkElement :
                null;
        }
    }
}

    Microsoft.Expression.Interactions(4.5.0.0)

    Microsoft.Expression.Interactions(4.5.0.0)

本文由糖果派对电玩城发布于独家专题,转载请注明出处:WPF自定义Window样式(2)

您可能还会对下面的文章感兴趣: