2

約 20 個の静的カスタム アイテムを追加する必要があるリスト ボックスがあります。すべてのアイテムは同じテンプレート (そのようなもの) に基づいています:

<Border>
  <StackPanel Orientation="Horizontal">
    <Image Source="" Height="30" />
    <TextBlock Text="" VerticalAlignment="Center" />
  </StackPanel>
</Border>

ListBox.Items でそれを 20 回繰り返したくありません。カスタム プロパティを設定できる次のような何かを実行できる UserControl が必要です。

<ListBox>
  <ListBox.Items>
    <MyListBoxTemplate x:Name="Item1" ItemText="Item #1" ItemImageSource="/Image1.jpg" />
    <MyListBoxTemplate x:Name="Item2" ItemText="Item #2" ItemImageSource="/Image2.jpg" />
    ...
  </ListBox.Items>
</ListBox>

しかし、そのためだけに userControl を作成したくありません!!! そのテンプレートを Window.Resources に配置する簡単な方法はありますか?

ありがとう

4

2 に答える 2

4

その特定のリストボックスにのみ使用している場合は、ItemTemplateプロパティを割り当てるだけです。これは、別のリソースで定義されたカスタム オブジェクトのコレクションと連携して機能する必要があります。これにより、カスタム UserControl を作成する必要がなくなりますが、XAML で定義できるオブジェクトと、XAML でのそれらのリストが必要になります。正直なところ、UserControl の作成は比較的簡単で簡単かもしれませんが、作成しなくても可能です。

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate TargetType="CustomObjectType">
            <Border>
              <StackPanel Orientation="Horizontal">
                <Image Source="{Binding ImageSource}" Height="30" />
                <TextBlock Text="{Binding TextContent}" VerticalAlignment="Center" />
              </StackPanel>
            </Border>
        <DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

編集:複数の場所で使用する場合はDataTemplate、アプリケーションリソースに入れ、キーを割り当ててから、ItemTemplateプロパティをに割り当てます{StaticResource MyListBoxItemsTemplateKey}

于 2012-04-04T19:51:32.237 に答える
0

XmlDataProviderand構文を使用するため、私のお気に入りのアプローチではありませんXPath(私は常に忘れがちです)。ただし、次のように、静的データを Window.Resources 内に xml として埋め込むことができます。

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Window.Resources>
        <XmlDataProvider x:Key="MyStaticData" XPath="StaticItems" >
            <x:XData>
                <StaticItems xmlns="">
                    <StaticItem>
                        <ItemText>Item #1</ItemText>
                        <ItemImageSource>/Image1.jpg</ItemImageSource>
                    </StaticItem>
                    <StaticItem>
                        <ItemText>Item #2</ItemText>
                        <ItemImageSource>/Image2.jpg</ItemImageSource>
                    </StaticItem>
                </StaticItems>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>
    <Grid>
        <ListBox>
            <ListBox.ItemsSource>
                <Binding Source="{StaticResource MyStaticData}"  XPath="StaticItem" />
            </ListBox.ItemsSource>
            <ListBox.ItemTemplate>
                <DataTemplate>
                <Border>
                    <StackPanel Orientation="Horizontal">
                            <Image Source="{Binding XPath=ItemImageSource}"  Height="30" />
                            <TextBlock Text="{Binding XPath=ItemText}" VerticalAlignment="Center" />
                        </StackPanel>
                </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

次に、ListBox 内で、指定した XmlDataProvider にバインドし、バインディング内で XPath 表記を使用して、コントロールをバインドするデータにドリルダウンします。

このサイトにもいくつかの良い例があります: http://vbcity.com/blogs/xtab/archive/2010/12/24/more-xpath-examples-in-a-wpf-application.aspx

お役に立てれば!

于 2012-04-04T21:13:47.737 に答える