So, I want to use a DataTemplateDictionary for both Nodes and Links for my GoXam Diagram.
However, I have the templates that make up the complete DataTemplateDictionary defined in separate files (a few templates for each kind of node):
I defined the DataTemplateDictionary and bring the templates into the ResourceDictionary as shown below:
[code]<ResourceDictionary>
<go:DataTemplateDictionary x:Key=“NodeTemplateDictionary”/>
<go:DataTemplateDictionary x:Key=“LinkTemplateDictionary”/>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source=“BasicNodes/BasicStyles.xaml” />
<ResourceDictionary Source=“BasicNodes/InputOutputBarStyles.xaml”/>
<ResourceDictionary Source=“BasicNodes/BasicLinkStyles.xaml”/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
[/code]
And my diagram can see the templates just fine (because I use them in a Palette). So, I know they’re getting pulled in correctly.
However, when go to drag a node from the Palette to the Diagram, the only thing I see left on the diagram is the following string:
“Northwoods.GoXam.PartManager+PartBinding”
It’s like it can’t resolve the template from within the DataTemplateDictionary. I know the templates within the dictionary work, because I can see them just fine when I don’t use the dictionary, and set the NodeTemplate explicitly on the Diagram.
Here is my Diagram xaml:
[code]<go:Diagram
GridVisible=“False”
x:Name=“myDiagram”
AllowDrop=“True”
BorderThickness=“1”
HorizontalContentAlignment=“Center”
VerticalContentAlignment=“Center”
NodeTemplateDictionary="{DynamicResource NodeTemplateDictionary}"
LinkTemplateDictionary="{DynamicResource LinkTemplateDictionary}">
</go:Diagram>[/code]
Also, I add the templates to the DataTemplateDictionary from within the code behind as shown:
</font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> MainWindow()</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> {</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">
this</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.InitializeComponent();</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">
var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> model = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">GraphLinksModel</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"><</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">NodeBase</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">String</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">String</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">LinkBase</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">>();</font></font>
// Build up the DataTemplate dictionary dynamically:<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">
var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> nodetemplates = </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Diagram</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.FindResource<</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DataTemplateDictionary</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">>(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">this</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"NodeTemplateDictionary"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">);</font></font><font face="Consolas" size="2"><font face="Consolas" size="2">
nodetemplates.Add(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"Input"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Diagram</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.FindResource<</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DataTemplate</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">>(myDiagram, </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"InputBarTemplate"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">));</font></font><font face="Consolas" size="2"><font face="Consolas" size="2">
nodetemplates.Add(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"Output"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Diagram</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.FindResource<</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DataTemplate</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">>(myDiagram, </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"OutputBarTemplate"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">));</font></font><font face="Consolas" size="2"><font face="Consolas" size="2">
nodetemplates.Add(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"BasicPaletteNode"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Diagram</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.FindResource<</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DataTemplate</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">>(myDiagram, </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"BasicPaletteNodeTemplate"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">));</font></font><font face="Consolas" size="2"><font face="Consolas" size="2">
nodetemplates.Add(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"BasicNode"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Diagram</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.FindResource<</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DataTemplate</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">>(myDiagram, </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"BasicNodeTemplate"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">));</font></font>
...<font face="Consolas" size="2"><font face="Consolas" size="2">
}<font color="#0000ff">
So, does anyone have any idea why the nodes can’t resolve the correct template in my situation? I know I must be missing something silly.
I think GoXam is incredibly well written, has an easy to use API, and seems very stable. I’m glad I found it! As soon as I can resolve this problem I will be rockin-n-rollin’!
Thanks guys!
Jason