All the controls missing in WPF. Over 1 million downloads.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.0 KiB

/*************************************************************************************
Extended WPF Toolkit
Copyright (C) 2007-2013 Xceed Software Inc.
This program is provided to you under the terms of the Microsoft Public
License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
For more features, controls, and fast professional support,
pick up the Plus Edition at http://xceed.com/wpf_toolkit
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
***********************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.ComponentModel;
using System.Diagnostics;
namespace Xceed.Wpf.Toolkit.Core
{
public class VersionResourceDictionary : ResourceDictionary, ISupportInitialize
{
private int _initializingCount;
private string _assemblyName;
private string _sourcePath;
public VersionResourceDictionary() { }
public VersionResourceDictionary(string assemblyName, string sourcePath)
{
( ( ISupportInitialize )this ).BeginInit();
this.AssemblyName = assemblyName;
this.SourcePath = sourcePath;
( ( ISupportInitialize )this ).EndInit();
}
public string AssemblyName
{
get { return _assemblyName; }
set
{
this.EnsureInitialization();
_assemblyName = value;
}
}
public string SourcePath
{
get { return _sourcePath; }
set
{
this.EnsureInitialization();
_sourcePath = value;
}
}
private void EnsureInitialization()
{
if( _initializingCount <= 0 )
throw new InvalidOperationException( "VersionResourceDictionary properties can only be set while initializing" );
}
void ISupportInitialize.BeginInit()
{
base.BeginInit();
_initializingCount++;
}
void ISupportInitialize.EndInit()
{
_initializingCount--;
Debug.Assert( _initializingCount >= 0 );
if( _initializingCount <= 0 )
{
if( this.Source != null )
throw new InvalidOperationException( "Source property cannot be initialized on the VersionResourceDictionary" );
if( string.IsNullOrEmpty( this.AssemblyName ) || string.IsNullOrEmpty( this.SourcePath ) )
throw new InvalidOperationException( "AssemblyName and SourcePath must be set during initialization" );
//Using an absolute path is necessary in VS2015 for themes different than Windows 8.
string uriStr = string.Format( @"pack://application:,,,/{0};v{1};component/{2}", this.AssemblyName, _XceedVersionInfo.Version, this.SourcePath );
this.Source = new Uri( uriStr, UriKind.Absolute );
}
base.EndInit();
}
private enum InitState
{
NotInitialized,
Initializing,
Initialized
};
}
}