0

C#コーディングでページリソース要素にアクセスするにはどうすればよいですか? XAML に次のコードがあります。C# コードの要素にアクセスしたいのですが、アクセスimageできません。

<Page.Resources>
 <DataTemplate x:Key="Standard250x250ItemTemplate">
     <Grid HorizontalAlignment="Left" Width="150" Height="150">
         <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">
             <Image x:Name="image" Source="{Binding Image}"  Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}" />
         </Border>    
     </Grid>
 </DataTemplate>
4

2 に答える 2

1

DataTemplateリソースは、ロードされるまでインスタンス化されないため、アクセスできません。最初にロードするには、次のようなことを行う必要があります。

var dataTemplate = (DataTemplate)this.Resources["Standard250x250ItemTemplate"];
var grid = dataTemplate.LoadContent();

次に、要素ツリーをトラバースして画像に到達します。

多くのシナリオでのより良いアプローチは、XAMLでイメージにアタッチできるアタッチされた依存関係プロパティまたはアタッチされた動作を定義し、関連付けられたイメージに関連するコードを記述することです。

于 2012-11-06T07:19:27.183 に答える
0

いつアクセスしようとしているかによって異なります。すでにレンダリングされている要素のイメージ コントロールにアクセスしようとする場合は、次のように ItemContainerGenerator を使用できます。

    //assumes using a ListView
    var item = (ListViewItem)listView.ItemContainerGenerator.ContainerFromItem(myModel);

    // traverse children
    var image = GetChildOfType<Image>(item);
    // use the image!

private T GetChildOfType<T>(DependencyObject obj)
{
    for(int i = 0; i< VisualTreeHelper.GetChildrenCount(obj); i++)
    {
        var child = VisualTreeHelper.GetChild(obj, i);
        if(child is T) return child as T;

        T item = GetChildOfType<T>(child);
        if(item != null) return item;
    }
    return null;
}

画像のプロパティを変更する必要がある場合は、バインドによっても実現できます。

于 2012-11-07T02:56:04.317 に答える