This seems like a fairly simple problem to fix so here goes. I have a stackpanel where I want to have a template per item. Here is what I have:
<StackPanel HorizontalAlignment="Stretch" Margin="8,34.7220001220703,8,8" VerticalAlignment="Stretch" x:Name="EmailStackPanel">
<StackPanel.Resources>
<DataTemplate x:Key="EmailTemplate">
<Grid Height="30" Margin="1,0,1,0" Width="Auto" Background="{Binding MailBackground}"> <!--#7F595959 -->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.039*"/>
<ColumnDefinition Width="0.044*"/>
<ColumnDefinition Width="0.071*"/>
<ColumnDefinition Width="0.661*"/>
<ColumnDefinition Width="0.185*"/>
</Grid.ColumnDefinitions>
<CheckBox HorizontalAlignment="Stretch" Margin="6,0,5.8730001449585,0" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" Padding="0,0,0,0" Grid.Column="1" Content="" IsChecked="{Binding IsChecked}" d:LayoutOverrides="Height"/>
<Image Margin="5.28999996185303,0.579999983310699,5.28800010681152,0" VerticalAlignment="Stretch" Grid.Column="2" Source="{Binding ImageSource}" Stretch="Uniform" d:LayoutOverrides="HorizontalAlignment"/>
<Path Visibility="{Binding IsSelectVisible}" HorizontalAlignment="Stretch" Margin="7,7.77799987792969,5,6.72200012207031" VerticalAlignment="Stretch" Data="M5.5,6.7779999 L13.5,14.278 L6.0000234,22.278" Stretch="Fill" Stroke="#FF585858" StrokeThickness="3"/>
<TextBlock Margin="0,0,0.00100000004749745,0" FontFamily="Trebuchet MS" FontSize="14" Foreground="#FFDBDBDB" Padding="0,8,0,0" Text="{Binding PreviewMessage}" TextWrapping="NoWrap" HorizontalAlignment="Stretch" Grid.Column="3"/>
<TextBlock Margin="3.99900007247925,0,0,0" FontFamily="Trebuchet MS" FontSize="11" Foreground="#FFDBDBDB" Padding="3,10,0,0" Text="11/18/08 12:34 PM" TextWrapping="NoWrap" HorizontalAlignment="Stretch" Grid.Column="4"/>
<Rectangle HorizontalAlignment="Stretch" Margin="3.99900007247925,0,0,0" VerticalAlignment="Stretch" Grid.Column="4" Fill="#7F4E4E4E" Stroke="#FF000000" StrokeThickness="0" RadiusX="2" RadiusY="2"/>
</Grid>
</DataTemplate>
<local:Email x:Key="theEmail" IsChecked="False" IsSelectVisible="Visible" MailBackground="#7F595959" ImageSource="Images/butterfly.png" PreviewMessage="The Don: Hello world :D"/>
</StackPanel.Resources>
<ContentControl Content="{Binding Source={StaticResource theEmail}}" ContentTemplate="{StaticResource EmailTemplate}"/>
</StackPanel>
I created a local xmlns declaration at the top of the page and set it to the current directory. The class definition to Email is fairly simple as well:
public class Email
{
public bool IsChecked { get; set; }
public Visibility IsSelectVisible { get; set; }
public string PreviewMessage { get; set; }
public ImageSource ImageSource { get; set; }
public SolidColorBrush MailBackground { get; set; }
}
That's it. But as soon as I go to display it, everything goes terribly wrong! It completely throws off the user interface. Any thoughts on databinding?