問題が発生しました(ObservableCollectionにアイテムが追加された後に)UI参照が返されます。だから、アイテムがコレクションに追加されたら、私は "Border"リファレンスを取得したいと思います。WPF ObservableCollection <T>追加された要素から参照を取得
Googleは解決策を試していましたが、見つけられませんでした。
XAML、私が望むのは、DatatemplateでBorderを返すことです(これは可能でしょうか)?
<ItemsControl ItemsSource="{Binding Elements}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Margin="37,0,0,0" Orientation="Horizontal" HorizontalAlignment="Left" Width="590" Height="29" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type ContentPresenter}" />
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Width="{Binding Style.Background.Width}" Margin="{Binding Style.Background.Position, Converter={StaticResource LeftMarginConverter}}" BorderThickness="{Binding Style.Background.BorderSize}" BorderBrush="{Binding Style.Background.BorderColor, Converter= {StaticResource MediaBrushConverter}}" Height="27" HorizontalAlignment="Center" VerticalAlignment="Center">
<Border.Background>
<LinearGradientBrush GradientStops="{Binding Style.Background.Background, Converter={StaticResource GradientConverter}}" Opacity="{Binding Style.Background.Opacity}"/>
</Border.Background>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="{Binding Value}" FontFamily="{Binding Style.Value.Font, Converter= {StaticResource FontConverter}}" Foreground="{Binding Style.Value.FontColor, Converter= {StaticResource MediaBrushConverter}}" FontSize="{Binding Style.Value.FontSize}" TextAlignment="Center" Opacity="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
<TextBlock Text="{Binding TextExtension}" FontFamily="{Binding Style.Value.Font, Converter= {StaticResource FontConverter}}" Foreground="#eaeaea" FontSize="{Binding Style.Value.FontSize}" TextAlignment="Center" Opacity="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
foreach(var x in Elements) // Elemets = ObservableCollection
{
var i =FControls.ItemContainerGenerator.ContainerFromItem(x) as Border;
MessageBox.Show(i.ToString()); /// Returns null
}
IMO UI要素を取得したり、ビューモデル内の特定の種類のコントロールにバインドされていると仮定してはいけません。ちょっとしたメモ。 –