使用资源(?)动态设置内部xaml

时间:2014-06-04 21:14:43

标签: xaml

我有一些xaml:

<StackPanel>
</StackPanel>

我想用更多的xaml填充这个xaml ...在其他地方定义:

<Border x:Key="TemplateOne">
    ...
</Border>

有没有办法让StackPanel填充Border xaml(与资源有关?)?

我试过这个:

<phone...>
    <StackPanel>    
        <StackPanel.Resources>
            <Border x:Key="TemplateOne">
                ...
            </Border>
        </StackPanel.Resources>
    </StackPanel>

    <StackPanel Resource="TemplateOne">
    </StackPanel>
</phone>

但它崩溃了。

最终结果是我可以根据数据绑定项中的一些变量来绑定我的资源......

例如:

XAML:

<!-- data template for items -->
...
    <StackPanel Resource="{Binding Template">
    </StackPanel>
...
<!--->

CS:

foreach(var item in items)
{
    if( item.type == "sausage" )
        item.Template = "TemplateOne"; // On property changed
    if( item.type == "egg" )
        item.Template = "TemplateTwo"; // On property changed
}

::: EDIT :::

我也试过这个,但它也崩溃了,因为StackPanel没有ContentTemplate作为属性。

<Grid.Resources>
    <Style x:Key="One" TargetType="StackPanel">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Height="auto" Grid.Column="0" Background="Transparent">
                        <Border Background="Transparent" BorderThickness="0" Width="62" Height="62" Margin="0,0,0,5">
                            <Image Source="{Binding Participants[0].image.thumbnail_link}" Width="62" Height="62" Stretch="UniformToFill"/>
                        </Border>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Grid.Resources>

<StackPanel Style="{StaticResource One}">
</StackPanel>

1 个答案:

答案 0 :(得分:0)

您可以在要放置模板的位置使用内容控件:

<ContentControl ContentTemplate="{StaticResource One}">
    <ContentPresenter />
</ContentControl>

然后在手机资源中:

<DataTemplate x:Key="One">
    <Border Background="Transparent" BorderThickness="0" Width="62" Height="62" Margin="0,0,0,5">
        <Image Source="{Binding Participants[0].image.thumbnail_link}" Width="62" Height="62" Stretch="UniformToFill"/>
    </Border>
</DataTemplate>