0

我有 N 个数据点和一个 N 长度的字符串列表。我想制作一个样式资源,我可以将其应用于每个 DataPoint,它将每个 TextBlock 绑定到列表中的一个元素。像这样的东西

<Style TargetType="charting:DataPoint" x:Key="annotatedChart">
        <Setter Property="Background" Value="CornflowerBlue"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="charting:DataPoint">
                    <Grid>
                        <Rectangle
                            Fill="{TemplateBinding Background}"
                            Stroke="Black"/>
                        <Grid
                            Background="#aaffffff"
                            Margin="0 -20 0 0"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Top">
                            <TextBlock
                                x:Name="textBox"
                                Text="{Binding}"   <!--TODO -->
                                FontWeight="Bold"
                                Margin="2"/>
                        </Grid>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我需要将该文本绑定到一个列表,以便具有此样式的每个数据点都将显示列表中的匹配文本元素。我尝试将主窗口的 DataContext 设置为多个对象和属性,但都无济于事。有一次,我的 DataPoints 显示了 Dependent 和 Independent 值,但从未显示我的字符串列表中的任何内容。

4

1 回答 1

0

好吧,我想通了。我制作了一个独立值和标签的字典,将其设置为我的窗口的 DataContext,并使用 IValueConverter 将文本框绑定到它,该 IValueConverter 在字典中找到相关值并将其映射到标签。

<TextBlock
            x:Name="textBox"
            Text="{Binding Key, Converter={StaticResource annotationsConverter}}"
            FontWeight="Bold"
            Margin="2"
            TextWrapping="Wrap"/>

public class myAnnotationsConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (MainWindow.annotations != null)
        {
            try
            {
                return MainWindow.annotations[value as string];
            }
            catch (KeyNotFoundException e)
            {
                return "NULL";
            }

        }
        throw new NotFiniteNumberException();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotFiniteNumberException();
    }
}

可能的改进:在类别轴中每个类别支持多列。因此,如果我有 2007 年 6 月的三个条形图,请为所有条形图保留一个不同的标签。

于 2013-06-27T13:25:07.643 回答