是否有缺少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的控件并设置其控件模板。我很欣赏这个问题的任何直接或间接解决方案。
答案 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);