B
Bill McCormick
Hello cSharpies,
I'm building my 1st WPF app and I'd like to get off to a good start, so
experienced advice I'm soliciting.
The application is an explorer like tool with two (2) main sections: 1)
a TreeView on the left and 2) a work Grid on the right (see XAML example
below.) The TreeView will display a hierarchy of Groups and Items; there
may be 1 or more Groups with the same set of Items. Selecting an Item
from the TreeView will display a set of controls in the work Grid. Each
Item's work Grid controls will be different. The same Items from
different groups will have the same work Grid, with different (bound) data.
For a Group and it's Items, I'd like to be able do the layout with the
designer and then use the resulting XAML as a sort of template along
with a class - having a class method load the template at runtime.
Questions:
1. Is this possible and/or advisable? If possible, how?
2. Can the XAML template be pre-compiled in some way to speed loading?
Thanks,
Bill
Example XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="370" Width="579"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<DockPanel
Height="Auto" Name="dockPanel1" Width="Auto">
<StatusBar
Height="23" Name="statusBar"
Width="Auto" VerticalAlignment="Bottom"
DockPanel.Dock="Bottom" />
<Menu Height="22" Name="menu1"
Width="Auto" VerticalAlignment="Top"
DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Name="MenuFileExit"
Header="Exit" Click="MenuFileExit_Click" />
</MenuItem>
</Menu>
<Grid Height="Auto" Name="grid" Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="3"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TreeView
Name="treeView" Height="Auto"
Grid.Column="0" Width="Auto">
<TreeViewItem Name="tviGroup" Header="Plant" >
<TreeViewItem Name="tviGroupItem1" Header="Item2" />
<TreeViewItem Name="tviGroupItem2" Header="Item2" />
<TreeViewItem Name="tviGroupItem3" Header="Item3" />
<TreeViewItem Name="tviGroupItem4" Header="Item4" />
</TreeViewItem>
</TreeView>
<GridSplitter
Name="gridSplitter" Grid.Column="1"
HorizontalAlignment="Stretch" />
<Grid
Name="workGrid"
Height="Auto" Width="Auto" Grid.Column="2" >
</Grid>
</Grid>
</DockPanel>
</Window>
I'm building my 1st WPF app and I'd like to get off to a good start, so
experienced advice I'm soliciting.
The application is an explorer like tool with two (2) main sections: 1)
a TreeView on the left and 2) a work Grid on the right (see XAML example
below.) The TreeView will display a hierarchy of Groups and Items; there
may be 1 or more Groups with the same set of Items. Selecting an Item
from the TreeView will display a set of controls in the work Grid. Each
Item's work Grid controls will be different. The same Items from
different groups will have the same work Grid, with different (bound) data.
For a Group and it's Items, I'd like to be able do the layout with the
designer and then use the resulting XAML as a sort of template along
with a class - having a class method load the template at runtime.
Questions:
1. Is this possible and/or advisable? If possible, how?
2. Can the XAML template be pre-compiled in some way to speed loading?
Thanks,
Bill
Example XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="370" Width="579"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<DockPanel
Height="Auto" Name="dockPanel1" Width="Auto">
<StatusBar
Height="23" Name="statusBar"
Width="Auto" VerticalAlignment="Bottom"
DockPanel.Dock="Bottom" />
<Menu Height="22" Name="menu1"
Width="Auto" VerticalAlignment="Top"
DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Name="MenuFileExit"
Header="Exit" Click="MenuFileExit_Click" />
</MenuItem>
</Menu>
<Grid Height="Auto" Name="grid" Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="3"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TreeView
Name="treeView" Height="Auto"
Grid.Column="0" Width="Auto">
<TreeViewItem Name="tviGroup" Header="Plant" >
<TreeViewItem Name="tviGroupItem1" Header="Item2" />
<TreeViewItem Name="tviGroupItem2" Header="Item2" />
<TreeViewItem Name="tviGroupItem3" Header="Item3" />
<TreeViewItem Name="tviGroupItem4" Header="Item4" />
</TreeViewItem>
</TreeView>
<GridSplitter
Name="gridSplitter" Grid.Column="1"
HorizontalAlignment="Stretch" />
<Grid
Name="workGrid"
Height="Auto" Width="Auto" Grid.Column="2" >
</Grid>
</Grid>
</DockPanel>
</Window>