LongListSelector から ImageBrush アイテムを選択しようとしています。ImageBrushes は DataTemplate 内にあるため、VisualTreeHelper を使用して選択しています。
私のサンプルxamlコード:
<phone:LongListSelector Grid.Row="0" Name="AllPhotosListBox"
SelectionChanged="AllPhotosListBox_SelectionChanged"
ItemsSource="{Binding PhotoItems}"
LayoutMode="Grid" GridCellSize="112, 112">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Border Margin="24,12,-12,0" Grid.Row="2" BorderThickness="1" BorderBrush="Gray" >
<Grid toolkit:TiltEffect.IsTiltEnabled="True">
<Grid.Background>
<ImageBrush ImageSource="{Binding ImageUrlLow}" Stretch="UniformToFill" />
</Grid.Background>
</Grid>
</Border>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
ImageBrushes を選択するための私のサンプル c# コードは次のとおりです。
for (int i = 0; i < AllPhotosListBox.ItemsSource.Count; i++)
{
AllPhotosListBox.UpdateLayout();
AllPhotosListBox.ScrollTo(AllPhotosListBox.ItemsSource[i]);
LongListSelector longListBoxItem = AllPhotosListBox as LongListSelector;
longListBoxItem.UpdateLayout();
var grid = VisualTreeHelper.GetChild(longListBoxItem, 0);
var grid1 = VisualTreeHelper.GetChild(grid, 0);
var viewportControl = VisualTreeHelper.GetChild(grid1, 0) as ViewportControl;
var contentPresenter1 = VisualTreeHelper.GetChild(viewportControl, 0) as ContentPresenter;
var canvas1 = VisualTreeHelper.GetChild(contentPresenter1, 0);
var canvas2 = VisualTreeHelper.GetChild(canvas1, 0);
var ContentPresenter2 = VisualTreeHelper.GetChild(canvas2, 0);
var border = VisualTreeHelper.GetChild(ContentPresenter2, 0);
var grid2 = VisualTreeHelper.GetChild(border, 0) as Grid;
ImageSource imgSource = (grid2.Background as ImageBrush).ImageSource;
// doing other stuffs here...
}
しかし、ここではすべてのイメージブラシを取得していません。では、10 個のイメージブラシを用意します。しかし、ソースがあり、他のソースが空であるイメージブラシは2つしかありません(ほとんどの場合、最初と最後の)。
私の選択に間違いはありませんか?助けが必要...