diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
index 84bcd70377..1419521e82 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
@@ -639,6 +639,34 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
AddBindingWithStaticResourceWhereResourceOnSameElement(true);
}
+ [Test]
+ public void AddStaticResourceWhereResourceOnSameElement()
+ {
+ DesignItem button = CreateCanvasContext("");
+ DesignItem canvas = button.Parent;
+
+ DesignItemProperty resProp = button.Properties.GetProperty("Resources");
+ Assert.IsTrue(resProp.IsCollection);
+ DesignItem exampleClassItem = canvas.Services.Component.RegisterComponentForDesigner(new ExampleClass());
+ exampleClassItem.Key = "res1";
+ resProp.CollectionElements.Add(exampleClassItem);
+
+ button.Properties["Tag"].SetValue(new StaticResourceExtension());
+ button.Properties["Tag"].Value.Properties["ResourceKey"].SetValue("res1");
+
+ string expectedXaml = "";
+
+ AssertCanvasDesignerOutput(expectedXaml, button.Context);
+ AssertLog("");
+ }
+
[Test]
public void AddBrushAsResource()
{
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs
index d7b1b1949e..dd23b6eef2 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs
@@ -38,36 +38,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
return false;
}
- foreach (var property in obj.Properties.Where((prop) => prop.IsSet))
- {
- var value = property.PropertyValue;
- if (value is XamlTextValue)
- continue;
- else
- {
- XamlObject xamlObject = value as XamlObject;
- if (xamlObject == null || !xamlObject.IsMarkupExtension)
- return false;
- else {
- var staticResource = xamlObject.Instance as System.Windows.StaticResourceExtension;
- if (staticResource != null &&
- staticResource.ResourceKey != null) {
- XamlObject parent = GetNonMarkupExtensionParent(xamlObject);
-
- if (parent != null) {
- var parentLocalResource = parent.ServiceProvider.Resolver.FindLocalResource(staticResource.ResourceKey);
-
- // If resource with the specified key is declared locally on the same object as the StaticResource is being used the markup extension
- // must be printed as element to find the resource, otherwise it will search from parent-parent and find none or another resource.
- if (parentLocalResource != null)
- return false;
- }
- }
- }
- }
- }
-
- return true;
+ return CanPrint(obj, false, GetNonMarkupExtensionParent(obj));
}
///
@@ -115,6 +86,28 @@ namespace ICSharpCode.WpfDesign.XamlDom
return sb.ToString();
}
+ private static bool CanPrint(XamlObject obj, bool isNested, XamlObject nonMarkupExtensionParent)
+ {
+ if ((isNested || obj.ParentObject == nonMarkupExtensionParent) && IsStaticResourceThatReferencesLocalResource(obj, nonMarkupExtensionParent)) {
+ return false;
+ }
+
+ foreach (var property in obj.Properties.Where((prop) => prop.IsSet)) {
+ var value = property.PropertyValue;
+ if (value is XamlTextValue)
+ continue;
+ else {
+ var xamlObject = value as XamlObject;
+ if (xamlObject == null || !xamlObject.IsMarkupExtension)
+ return false;
+ else
+ return CanPrint(xamlObject, true, nonMarkupExtensionParent);
+ }
+ }
+
+ return true;
+ }
+
private static XamlObject GetNonMarkupExtensionParent(XamlObject markupExtensionObject)
{
System.Diagnostics.Debug.Assert(markupExtensionObject.IsMarkupExtension);
@@ -125,5 +118,21 @@ namespace ICSharpCode.WpfDesign.XamlDom
}
return obj;
}
+
+ private static bool IsStaticResourceThatReferencesLocalResource(XamlObject obj, XamlObject nonMarkupExtensionParent)
+ {
+ var staticResource = obj.Instance as System.Windows.StaticResourceExtension;
+ if (staticResource != null && staticResource.ResourceKey != null && nonMarkupExtensionParent != null) {
+
+ var parentLocalResource = nonMarkupExtensionParent.ServiceProvider.Resolver.FindLocalResource(staticResource.ResourceKey);
+
+ // If resource with the specified key is declared locally on the same object as the StaticResource is being used the markup extension
+ // must be printed as element to find the resource, otherwise it will search from parent-parent and find none or another resource.
+ if (parentLocalResource != null)
+ return true;
+ }
+
+ return false;
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs
index b77ef92be8..1e7ac464a9 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs
@@ -27,6 +27,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public class ProjectReferencePanel : ListView, IReferencePanel
{
ISelectReferenceDialog selectDialog;
+ TextBox filterTextBox;
public ProjectReferencePanel(ISelectReferenceDialog selectDialog)
{
@@ -48,6 +49,15 @@ namespace ICSharpCode.SharpDevelop.Gui
ItemActivate += delegate { AddReference(); };
PopulateListView();
+
+
+ Panel upperPanel = new Panel { Dock = DockStyle.Top, Height = 20 };
+ filterTextBox = new TextBox { Width = 150, Dock = DockStyle.Right };
+ filterTextBox.TextChanged += delegate { Search(); };
+
+ upperPanel.Controls.Add(filterTextBox);
+
+ this.Controls.Add(upperPanel);
}
public void AddReference()
@@ -60,6 +70,7 @@ namespace ICSharpCode.SharpDevelop.Gui
new ProjectReferenceProjectItem(selectDialog.ConfigureProject, project)
);
}
+ filterTextBox.Text = "";
}
void PopulateListView()
@@ -74,5 +85,32 @@ namespace ICSharpCode.SharpDevelop.Gui
Items.Add(newItem);
}
}
+
+ static bool ContainsAnyOfTokens(string bigText, string[] tokens)
+ {
+ if(tokens.Length==0)
+ return true;
+ foreach(var token in tokens)
+ {
+ if(bigText.IndexOf(token, StringComparison.OrdinalIgnoreCase)<0)
+ return false;
+ }
+ return true;
+ }
+
+ void Search()
+ {
+ Items.Clear();
+ var tokens = filterTextBox.Text.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries);
+
+ foreach (IProject project in ProjectService.OpenSolution.Projects.
+ Where(pr=>ContainsAnyOfTokens(pr.Name, tokens))
+ .OrderBy(p => p.Name, StringComparer.OrdinalIgnoreCase)
+ ) {
+ ListViewItem newItem = new ListViewItem(new string[] { project.Name, project.Directory });
+ newItem.Tag = project;
+ Items.Add(newItem);
+ }
+ }
}
}
diff --git a/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs b/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs
index cb85ac4348..af97190bf2 100644
--- a/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs
+++ b/src/Main/Base/Project/Util/SharpDevelopServiceContainer.cs
@@ -161,9 +161,8 @@ namespace ICSharpCode.SharpDevelop
{
Type serviceType = typeof(T);
lock (services) {
- object instance;
- if (services.TryGetValue(serviceType, out instance)) {
- return Task.FromResult((T)instance);
+ if (services.ContainsKey(serviceType)) {
+ return Task.FromResult((T)GetService(serviceType));
} else {
object taskCompletionSource;
if (taskCompletionSources.TryGetValue(serviceType, out taskCompletionSource)) {
diff --git a/src/Main/GlobalAssemblyInfo.cs.template b/src/Main/GlobalAssemblyInfo.cs.template
index 24cb65ee69..abf126b695 100644
--- a/src/Main/GlobalAssemblyInfo.cs.template
+++ b/src/Main/GlobalAssemblyInfo.cs.template
@@ -46,7 +46,7 @@ internal static class RevisionClass
public const string Minor = "0";
public const string Build = "0";
public const string Revision = "$INSERTREVISION$";
- public const string VersionName = "Beta 4"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1")
+ public const string VersionName = "Beta 5"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1")
public const string FullVersion = Major + "." + Minor + "." + Build + ".$INSERTREVISION$$INSERTBRANCHPOSTFIX$$INSERTVERSIONNAMEPOSTFIX$";
}