私は虐待の準備ができています。なぜこれが機能していないのかわかりません。XMLからツリービューが塗りつぶされていません
ここでは、関連するXAMLです:
<Window.Resources>
<XmlDataProvider x:Key="Family" Source="TestArmy1.xml" XPath="/Army"/>
</Window.Resources>
//スニップ
<TreeView Name="OOB" Height="880" Background="#00000000"
BorderBrush="#00000000" Padding="100,1,1,50" UseLayoutRounding="False"
MouseRightButtonDown="TreeViewPreviewRightButtonDown" DataContext="{StaticResource Family}" ItemsSource="{Binding XPath=Commander}" FontSize="12" />
はここでC#のコードです:
//This is for dynamically building a treeview with templates from an XML file
XmlTextReader xmlReader1 = new XmlTextReader("HierarchicalDataTemplate1.xml");
HierarchicalDataTemplate hierarchicalDataTemplate1 = XamlReader.Load(xmlReader1) as HierarchicalDataTemplate;
XmlTextReader xmlReader2 = new XmlTextReader("HierarchicalDataTemplate2.xml");
HierarchicalDataTemplate hierarchicalDataTemplate2 = XamlReader.Load(xmlReader2) as HierarchicalDataTemplate;
hierarchicalDataTemplate1.ItemTemplate = hierarchicalDataTemplate2;
XmlTextReader xmlReader3 = new XmlTextReader("HierarchicalDataTemplate3.xml");
HierarchicalDataTemplate hierarchicalDataTemplate3 = XamlReader.Load(xmlReader3) as HierarchicalDataTemplate;
hierarchicalDataTemplate2.ItemTemplate = hierarchicalDataTemplate3;
OOB.ItemTemplate = hierarchicalDataTemplate1;
Thread updateThread = new Thread(new ParameterizedThreadStart(UpdateTree));
updateThread.Start(this);
とTreeViewコントロールを構築しますコード:
private void UpdateTree(object obj)
{
if (File.Exists("TestArmy1.xml") == false)
{
MessageBox.Show("Unable to open\nTestArmy1.xml");
return;
}
MainWindow window = (MainWindow)obj;
window.Dispatcher.Invoke(DispatcherPriority.Send, new Action(RebuildTree));
}
private void RebuildTree()
{
XmlDataProvider provider = new XmlDataProvider();
XmlDocument xmlFile = new XmlDocument();
xmlFile.Load("TestArmy1.xml");
provider.Document = xmlFile;
provider.XPath = "/Army";
OOB.DataContext = provider;
XmlNode node = xmlFile.DocumentElement.SelectSingleNode("ArmyName");
ArmyNameString = node.InnerText;
ArmyNameTitle.Content = ArmyNameString;
}
これは、それがロードされ、(今剥ぎ取ら)XMLファイル、TestArmy1.xmlです:
<?xml version="1.0" encoding="UTF-8"?>
<Army>
<ArmyName>The Army of Northern Virginia</ArmyName>
<Commander>
<CommanderName>The Emperor With the Very Long Name!</CommanderName>
<CommanderLeadership>94</CommanderLeadership>
<Division>
<DivisionCommanderName>Major General William T. Sherman</DivisionCommanderName>
<DivisionCommanderLeadership>78</DivisionCommanderLeadership>
<Unit>
<UnitName>'Chasseurs à Cheval Garde"</UnitName>
<UnitType>Cavalry</UnitType>
<UnitKStrength>3</UnitKStrength>
<UnitStrength>456</UnitStrength>
<UnitQuality>10</UnitQuality>
<UnitMorale>7</UnitMorale>
<UnitLeadership>7</UnitLeadership>
<UnitAmmunition>99</UnitAmmunition>
</Unit>
</Division>
<Division>
<DivisionCommanderName>Marshal Ney</DivisionCommanderName>
<DivisionCommanderLeadership>8</DivisionCommanderLeadership>
</Division>
</Commander>
</Army>
はここHierarchicalDataTemplate1です:
<HierarchicalDataTemplate
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
ItemsSource="{Binding XPath=Commander}"
>
<Grid Height="62" Width="auto">
<Grid Height="61" HorizontalAlignment="Left" Margin="0,0,0,0" Name="grid1" VerticalAlignment="Top" Width="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<Image Source= "HeadQuarters.png" Grid.Column="1" Grid.RowSpan="2" HorizontalAlignment="Center" Stretch="None" OpacityMask="White"></Image>
<Label Content="{Binding XPath=CommanderName}" Height="54" HorizontalAlignment="Left" Name="label1" VerticalAlignment="Top" FontFamily="K22 Monastic" FontSize="36" Margin="2,4,0,6" Grid.RowSpan="2" Grid.Column="2" />
<Label Content="Leadership:" HorizontalAlignment="Left" Margin="5,0,0,0" VerticalAlignment="Bottom" Grid.Column="3" />
<ProgressBar HorizontalAlignment="Left" Height="20" Name="CommanderLeadershipProgressBar" VerticalAlignment="Top" Width="150" Grid.Column="3" Grid.Row="2" Margin="10,0,0,0" Minimum="1" Maximum="100" Value="{Binding XPath=CommanderLeadership}" />
<TextBlock Text="{Binding ElementName=CommanderLeadershipProgressBar, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Column="3" Grid.Row="2" />
<Button Content="Create Subordinate Unit" Height="35" Width="auto" HorizontalAlignment="Left" Margin="10,0,50,0" Name="button1" VerticalAlignment="Center" Grid.Column="4" Grid.RowSpan="2" />
</Grid>
</Grid>
:
<HierarchicalDataTemplate
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
ItemsSource="{Binding XPath=Commander}"
>
<Grid Height="62" Width="auto">
<Grid Height="61" HorizontalAlignment="Left" Margin="0,0,0,0" Name="grid1" VerticalAlignment="Top" Width="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<Image Source= "HeadQuarters.png" Grid.Column="1" Grid.RowSpan="2" HorizontalAlignment="Center" Stretch="None" OpacityMask="White"></Image>
<Label Content="{Binding XPath=CommanderName}" Height="54" HorizontalAlignment="Left" Name="label1" VerticalAlignment="Top" FontFamily="K22 Monastic" FontSize="36" Margin="2,4,0,6" Grid.RowSpan="2" Grid.Column="2" />
<Label Content="Leadership:" HorizontalAlignment="Left" Margin="5,0,0,0" VerticalAlignment="Bottom" Grid.Column="3" />
<ProgressBar HorizontalAlignment="Left" Height="20" Name="CommanderLeadershipProgressBar" VerticalAlignment="Top" Width="150" Grid.Column="3" Grid.Row="2" Margin="10,0,0,0" Minimum="1" Maximum="100" Value="{Binding XPath=CommanderLeadership}" />
<TextBlock Text="{Binding ElementName=CommanderLeadershipProgressBar, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Column="3" Grid.Row="2" />
<Button Content="Create Subordinate Unit" Height="35" Width="auto" HorizontalAlignment="Left" Margin="10,0,50,0" Name="button1" VerticalAlignment="Center" Grid.Column="4" Grid.RowSpan="2" />
</Grid>
</Grid>
そして、ここではHierarchialDataTemplate2です
ここにHierarchicalDataTemplate3があります。
<HierarchicalDataTemplate
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
ItemsSource="{Binding XPath=Unit}"
>
<Grid Height="62" Width="auto">
<Grid Height="61" HorizontalAlignment="Left" Margin="0,0,0,0" Name="grid1" VerticalAlignment="Top" Width="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<Label Content="{Binding XPath=UnitName}" Height="54" HorizontalAlignment="Left" Name="label4" VerticalAlignment="Top" FontFamily="K22 Monastic" FontSize="36" Margin="2,4,0,6" Grid.RowSpan="2" Grid.Column="2" />
</Grid>
</Grid>
限り、それは(誰もが興味を持っているならば、私はウォーゲームの戦い表の順序と呼ばれるものを構築しています)行くと罰金です。しかし、TreeView全体を構築し続けるわけではありません。私はそれがちょうど最初のノードを読んで停止していると思う。
私には何が欠けていますか?助けてくれてありがとう。私を打ち負かすことは自由に感じてください。
はい、これは問題です。上記の投稿を編集してHierarchicalDataTemplate2を表示しました。私は思った(考えて)私はあなたが2番目のデータテンプレートのために提案したものを実装しましたが、それはそれを拾うのではありません。 – zetar
はい、HierarchicalDataTemplatesは間違っていました...以前は正しかったですし、私はばかだから変更しました。私はそれらを以前のように戻します(これはあなたが指摘した通りです)が、最初のノードが表示されているだけです。 – zetar
@zetar:正確には、あなたのItemsSourceが間違って'Division 'ではなく' Command 'に設定されているので、機能しません。Commanderに設定すると、Commanderの子であることが期待されます。あなたが表示するXMLスニペットで真。 –