Динамическое добавление Canvas в строку
Попытка добавить на каждую строку по Canvas, с последующей возможностью его изменения.
Ошибок компиляции нет, и вроде как новый экземпляр Canvas присваивается свойству ShowCanvas и добавляется в коллекцию CanvasList через цикл в методе Window_Loaded. На как проверка - изменения цвета, не работает. Наследование CanvasData от Canvas ни к чему тоже не привело
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace Sequencer_2._1._1
{
public partial class MainWindow : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
private ObservableCollection<RowData> _rows;
public ObservableCollection<RowData> Rows
{
get => _rows;
set
{
_rows = value;
OnPropertyChanged();
}
}
private ObservableCollection<CanvasData> _canvasList;
public ObservableCollection<CanvasData> CanvasList
{
get => _canvasList;
set
{
_canvasList = value;
OnPropertyChanged();
}
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Rows = new ObservableCollection<RowData>();
for (int i = 0; i < 400; i++)
Rows.Add(new RowData() { Title = "Item" + i });
CanvasList = new ObservableCollection<CanvasData>();
for (int i = 0; i < 400; i++)
{
CanvasList.Add(new CanvasData() { ShowCanvas = new Canvas() });
}
for (int i = 0; i < 400; i++)
{
CanvasList[i].ShowCanvas.Background = Brushes.Red;
}
}
}
public class RowData
{
public string Title { get; set; }
}
public class CanvasData
{
public Canvas ShowCanvas { get; set; }
}
}
.xaml Привязка к свойству во 2ом Border и 2 колонке
<Grid>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Rows}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Background="LightSlateGray">
<TextBlock Padding="10,5" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Title}"/>
</Border>
<Border Grid.Column="0" BorderThickness="0,0,0,1">
<Border.BorderBrush>
<VisualBrush>
<VisualBrush.Visual>
<Rectangle StrokeDashArray="4 4" Stroke="Gray" StrokeThickness="1"
Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}},
Path=ActualWidth}"
Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}},
Path=ActualHeight}"/>
</VisualBrush.Visual>
</VisualBrush>
</Border.BorderBrush>
</Border>
<Border Grid.Column="1" BorderThickness="0,0,0,1">
<Canvas>
<ContentPresenter Content="{Binding Path = ShowCanvas}"/>
</Canvas>
<Border.BorderBrush>
<VisualBrush>
<VisualBrush.Visual>
<Rectangle StrokeDashArray="4 4" Stroke="Gray" StrokeThickness="1"
Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}},
Path=ActualWidth}"
Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}},
Path=ActualHeight}"/>
</VisualBrush.Visual>
</VisualBrush>
</Border.BorderBrush>
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>