1

XML は次のとおりです。

<Items>
    <Item>
        <Name>Item1</Name>
        <Links>
            <Link>
                <LinkText>Image 1</LinkText>
                <LinkUri>Images/Image1.jpg</LinkUri>
            </Link>
            <Link>
                <LinkText>Image 2</LinkText>
                <LinkUri>Images/Image2.jpg</LinkUri>
            </Link>
        </Links>
    </Item>
    <Item>
        <Name>Item2</Name>
        <Links>
            <Link>
                <LinkText>Image 3</LinkText>
                <LinkUri>Images/Image3.jpg</LinkUri>
            </Link>
            <Link>
                <LinkText>Image 4</LinkText>
                <LinkUri>Images/Image4.jpg</LinkUri>
            </Link>
        </Links>
    </Item>
</Items>

これが最初のバインディングですListBox

<Grid.Resources>
        <XmlDataProvider
            x:Key="Items"
            Source="ScannerProblems.xml"
            XPath="Items" />            
</Grid.Resources>

<ListBox
                x:Name="lstProblems"
                Grid.Row="0"
                Grid.RowSpan="3"
                Grid.Column="0"
                IsSynchronizedWithCurrentItem="True"
                ItemsSource="{Binding Source={StaticResource Items}, XPath=Item}"
                DisplayMemberPath="{Binding}">
                <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border
                        Background="#2200FF00"
                        BorderBrush="Black"
                        BorderThickness="1"
                        CornerRadius="8"
                        Margin="2,4,2,4"
                        Padding="4">

                        <StackPanel
                            x:Name="sp">
                            <TextBlock
                                FontWeight="Bold">Problem Description</TextBlock>

                            <TextBlock
                                Width="{Binding ElementName=sp, Path=ActualWidth}"
                                Text="{Binding XPath=Name}"
                                TextWrapping="Wrap" />
                        </StackPanel>
                    </Border>
                    </DataTemplate>
                </ListBox.ItemTemplate>

                <ListBox.ItemContainerStyle>
                    <Style
                        TargetType="ListBoxItem">
                        <Setter
                            Property="HorizontalContentAlignment"
                            Value="Stretch" />
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>

そこからListBoxアイテムを選んでいきます。ListBoxそのアイテムを選択すると、その選択したアイテムの XML からのリンク アイテムが別のアイテムに取り込まれます。それは簡単なことのように思えますが、私が試したさまざまなことで、空またはListBox(時間のリストではなく、一度だけ)のいずれかが得られます。System.Windows.DataTemplateListBox

編集:ここから、私は変更しました。これは、ListBox提案された変更を行った後の 2 番目のマークアップです。将来この質問を使用する人には、次のように表示されます。

<ListBox
            DataContext="{Binding SelectedItem, ElementName=lstProblems}"
            ItemsSource="{Binding XPath=Links/Link}"
            Grid.Row="1"
            Grid.Column="1"
            Grid.ColumnSpan="2"
            IsSynchronizedWithCurrentItem="False">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding}">
                        <Button.ContentTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <Image
                                        Margin="10"
                                        MaxHeight="200"
                                        Source="{Binding XPath=LinkUri}" />

                                    <TextBlock
                                        Text="{Binding XPath=LinkText}"
                                        TextWrapping="Wrap"
                                        Margin="10,0,10,20" />
                                </StackPanel>
                            </DataTemplate>
                        </Button.ContentTemplate>
                    </Button>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
4

1 に答える 1

1

あなたは2番目のリストにDataTemplate入るはず です。<ListBox.ItemTemplate>現在、その直下に設定しているため、クラス名が表示されています。またDataContext、コレクションで直接設定しているため、設定する必要がありますItemsSource={Binding}

于 2013-09-10T14:55:46.803 に答える