x:Silverlight中的共享MarkupExtension

时间:2012-02-20 19:13:19

标签: wpf silverlight xaml

是否有缺少x的解决方法:Silverlight中的共享MarkupExtension?

我有以下Xaml,它在每个目标系列上创建一个椭圆。我需要椭圆是唯一的,因为它们稍后被添加到画布中。通过使用此Xaml,我得到UIElement已经添加到另一个父级的错误(例如,多次添加到Canvas的单个Ellipse实例)。

在WPF中,我只需在此样式上使用x:Shared属性即可使其工作。

    <!-- Set the style for the series -->
    <Style TargetType="SciChart:FastLineRenderableSeries" >
        <Setter Property="SeriesColor" Value="#FF93F2C1"/>
        <Setter Property="ResamplingMode" Value="Mid"/>
        <Setter Property="RolloverMarker">
            <Setter.Value>
                <Ellipse Width="9" Height="9" Fill="#7793F2C1" Stroke="#FFA3FFC9"/>
            </Setter.Value>
        </Setter>
    </Style>

我考虑的一个解决方法是创建一个名为RolloverMarker的控件并设置其控件模板。我很欣赏这个问题的任何直接或间接解决方案。

1 个答案:

答案 0 :(得分:1)

如果要动态地向对象添加对象,则每次都需要创建一个新对象,或者需要在某种模板中定义控件并添加将使用该模板的新数据对象。您不能多次添加相同的项目。

例如,

// Does not work
var templateItem = new FastLineRenderableSeries();
myCanvas.Add(templateItem);
myCanvas.Add(templateItem);


// Works
myCanvas.Add(new FastLineRenderableSeries());
myCanvas.Add(new FastLineRenderableSeries());

或者

<ItemsControl ItemsSource="{Binding SomeCollection}"
              ItemTemplate="{StaticResource FastLineRenderableSeriesStyle}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
// Add items. They'll get rendered with defined ItemStyle.
var templateItem = new FastLineRenderableSeries();
SomeCollection.Add(templateItem);
SomeCollection.Add(templateItem);