如何使用资源两次?

时间:2011-06-24 18:04:25

标签: c# xaml resources resourcedictionary

在我的应用程序资源中,我有:

    <Application.Resources>

    <Border x:Key="border1" BorderBrush="{x:Null}" BorderThickness="0" Height="159"  Width="5" >
        <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FFFC0C0C" Offset="0" />
                <GradientStop Color="#63FF0000" Offset="0.999" />
                <GradientStop Color="#6AFE0000" Offset="0.048" />
            </LinearGradientBrush>
        </Border.Background>
    </Border>

</Application.Resources>

我想将这个边框添加到堆栈面板,如:

            Border temp = new Border();
            temp = (Border)FindResource("border1");
            temp.Name = "bar" + i;
            stackPanel1.Children.Add(temp);

这很好用。唯一的问题是我想添加该边框的两个实例。因此我把它放在一个循环中:

            for (int i = 0; i < 10; i++)
        {
            Border temp = new Border();
            temp = (Border)FindResource("border1");
            temp.Name = "bar" + i;
            stackPanel1.Children.Add(temp);
        }

在第二次迭代中我得到错误:

enter image description here

但对我来说,似乎没有解析例,因为注意第一次迭代没有问题:

enter image description here

我怎样才能多次使用资源?我知道我可以动态创建该资源,但我需要实际使用该资源。

1 个答案:

答案 0 :(得分:6)

如果您将x:Shared="false"添加到资源定义中,它应该有效:

<Border x:Key="border1" x:Shared="false" BorderBrush="{x:Null}" BorderThickness="0" Height="159"  Width="5" >
    <Border.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFFC0C0C" Offset="0" />
            <GradientStop Color="#63FF0000" Offset="0.999" />
            <GradientStop Color="#6AFE0000" Offset="0.048" />
        </LinearGradientBrush>
    </Border.Background>
</Border>