C# 向动态创建的网格行添加GridSplitter?
我正在开发一个视图,它有一个分层的可选择树&C# 向动态创建的网格行添加GridSplitter?,c#,wpf,xaml,wpf-controls,C#,Wpf,Xaml,Wpf Controls,我正在开发一个视图,它有一个分层的可选择树&ItemsControl绑定到一组图表。这些图表在运行时根据用户选择进行解析。我希望图表垂直拉伸并共享所有可用空间 我曾经使用ItemsControl ItemsPanelTemplate中的附加属性在运行时动态解析网格中的行。这将按预期工作,图表共享可用空间 <ItemsControl Grid.Row="1" x:Name="TimeSeriesCharting"
ItemsControl
绑定到一组图表。这些图表在运行时根据用户选择进行解析。我希望图表垂直拉伸并共享所有可用空间
我曾经使用ItemsControl ItemsPanelTemplate中的附加属性在运行时动态解析网格中的行。这将按预期工作,图表共享可用空间
<ItemsControl Grid.Row="1"
x:Name="TimeSeriesCharting"
ItemsSource="{Binding TimeSeriesChartViewModels}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid helpers:GridHelpers.RowCount="{Binding RowCount}"
helpers:GridHelpers.StarRows="0,1,2,3">
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!-- ItemContainerStyle -->
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding RowIndex}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
我假设在这种情况下使用
ItemsControl
会出现问题。这里有更好的模式吗?将自定义网格作为独立用户控件写入?您可以尝试将GridSplitter放入ItemTemplate?:我无法显式设置项上的grid.Row属性,因为在运行时之前我不会解析行。我尝试将GridSplitter放在项目本身中,它是一个视图。这对该视图有效,但显然对所有其他视图无效,因此它们不会调整大小…下面是一个现有的答案,提示可能的方向:。我也在探索这一点。
public static void RowCountChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
if (!(obj is Grid) || (int)e.NewValue < 0)
{
return;
}
Grid grid = (Grid)obj;
grid.RowDefinitions.Clear();
for (int i = 0; i < (int)e.NewValue; i++)
{
grid.RowDefinitions.Add(new RowDefinition()
{
Height = GridLength.Auto
});
SetStarRows(grid);
}
grid.Children.Clear();
for (int i = 0; i < grid.RowDefinitions.Count; i++)
{
GridSplitter gridSplitter = new GridSplitter();
gridSplitter.SetResourceReference(FrameworkElement.StyleProperty, "HorizontalGridSplitterStyle");
Grid.SetRow(gridSplitter, i);
grid.Children.Add(gridSplitter);
}
}