Попытка получить доступ к StackPanel внутри ячейки DataGrid

#c# #wpf #xaml #datagrid #stackpanel

#c# #wpf #xaml #datagrid #stackpanel

Вопрос:

Прямо сейчас я застрял при попытке получить доступ к StackPanel внутри DataGrid Cell .

Моя цель — программно сгенерировать маленькие картинки (значки) внутри a StackPanel на основе другого поля внутри a DataGrid .

Это мой XAML для Column

 <DataGridTemplateColumn Width="*" x:Name="generatedBandges">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <!--<Image Source="....Imagebadge.png" />-->
            </StackPanel>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
  

Я просто не знаю, как туда добраться, чтобы генерировать значки для каждого Row

1-я правка: Я пытался обойти это, внедрив повторяющееся изображение и привязав ширину, но я не могу заставить это работать, и это решает проблему, только если у вас есть одна строка изображений (мне нужно больше строк : ( )

Код, который я пробовал…

                   <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                            <Rectangle Height="15" Width="{Binding Badge}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
                                <Rectangle.Fill>
                                    <ImageBrush ImageSource="....Imagesim.png" TileMode="Tile" ViewportUnits="Absolute" Viewport="0,0,15,15"/>
                                </Rectangle.Fill>
                            </Rectangle>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
  

Есть ли способ привязать stackpanel? Так я могу добавить к ней элементы управления или что-то в этом роде?

2-я правка: Итак, я попробовал это … но снова не могу заставить это работать — могла бы понадобиться помощь..

  <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>

                        <ItemsControl ItemsSource="{Binding Items}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>

                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Image Source="....Imagesim.png"/>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>

                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
  

Комментарии:

1. вы не можете получить доступ к элементам управления внутри DataTemplate напрямую из кода. Лучше всего будет привязать источник изображения к свойству и изменить его по мере необходимости. Возможно, вы также захотите реализовать INotifyPropertyChanged . Также взгляните на BitmapSource и IValueConverter .

2. Ну, я хотел бы несколько раз дублировать изображение, сопоставляя данные в datagrid, например, с рейтингом фильма… некоторые записи имеют три звездочки, а некоторые пять.

3. @DavidWaldo: К какой StackPanel строке в DataGrid вы пытаетесь получить доступ и почему?

4. Это может показаться глупым, но попробуйте использовать x: Bind вместо привязки к вашему ItemsSource