0

リスト ボックスが 1 つあり、このリスト ボックスにはイメージ コントロールが含まれています。

リストボックス項目のクリックイベントで実行時の画像パスを変更したい。

イメージ コントロール パスを変更するにはどうすればよいですか?

私のコードは次のようなものです:

  <ListBox x:Name="TransactionList" Width="450" Height="450" Margin="0,0,0,0">    
    <ListBox.ItemTemplate >
      <DataTemplate>

            <StackPanel Orientation="Horizontal" Width="450" Height="auto" Margin="0,0,10,0" >
                <StackPanel Orientation="Horizontal"  Width="300" Height="auto" Margin="0,0,1,10">
                    <TextBlock Height="35" Width="250"  Margin="10,0,0,90" Text="{Binding SONGNAME}" FontSize="22" Foreground="Red" Name="tbSubCategories" />
                    <TextBlock Height="25" Margin="-250,10,180,30" Text="SingBy:" FontSize="18" Foreground="Gray" Name="tbsingby" />
                    <TextBlock Height="auto" TextWrapping="Wrap" Width="210" Margin="-180,50,0,70" Text="{Binding  SINGBY}" FontSize="18" Foreground="Gray" Name="tbSingBy" />
                     <TextBlock Height="25"  Margin="-280,60,200,0" Text="MusicBy:" FontSize="18" Foreground="Gray" Name="tbMusicby" />
                     <TextBlock Height="auto" TextWrapping="Wrap" Width="200" Margin="-205,100,0,30" Text="{Binding MUSICBY}" FontSize="18" Foreground="Gray" Name="tbMusicBy" />
                </StackPanel>
            <StackPanel Orientation="Vertical"  Height="auto" Width="auto" Margin="0,50,0,35">
              <Image Name="imgsubcatagorie" Width="40" Height="40"  VerticalAlignment="Center" FlowDirection="LeftToRight" Source="/VodafoneAugmentedReality;component/Images/play1.png" />
            </StackPanel>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox> 

リスト ボックスの項目をクリックしたときに、imgsubcatagories のイメージ コントロール パスを変更したいと考えています。助けて

4

1 に答える 1

0

わかりました、それはかなり簡単ではありません。

画像オブジェクトを取得できる場合、次のように簡単に実行できます。

imgsubcatagorie.Source = ModifyImageSource(new Uri("yourUri", UriKind.RelativeOrAbsolute));

 private ImageSource ModifyImageSource(Uri uri)
        {
                image = new BitmapImage(uri);
                return image;          
        }

ただし、このオブジェクトをそのまま取得することはできません。どうやって手に入れるかが最大の問題。

何らかの方法で TransactionList からプルする必要があります。(また、非常に重い構造があります: listbox=>stackpanel=>stackpanel=>image)

私の最初のアイデアは、ループを使用して TransactionList のすべてのアイテムを調べ、そこで画像を見つけようとすることでした。


可能な解決策

私は ListBox.ItemTemplate 機能に精通しておらず、コード全体を持っていませんが、何でも...

直接的なアプローチ: ループを使用して項目を検索してみてください。

foreach (var x in TransactionList.Items)
            {
                if (x is Image)
                {
                    image = (Image)x;
                    break;
                }
            }

次に、この画像オブジェクトをイベント ハンドラーで使用します。

また

具象型の要素を検索します。

この質問もチェックしてください:

Listbox.ItemTemplate 内のコントロールを検索

wp7 用ではありませんが、動作する可能性があります。

于 2012-12-04T05:19:58.577 に答える