我有一个自定义控件,它有两个使用 GridViewRowPresenters 的 listViews。我需要两个 listViews 的行高相同。问题是在运行时间之前我不知道高度会是多少。
也就是说,两者的高度都将设置为 Auto,并且在呈现控件时,一个 listView 的行将在 ActualHeight = 30 处,另一个在 ActualHeight = 40 处。我希望它们都是 40。
我有一个自定义控件,它有两个使用 GridViewRowPresenters 的 listViews。我需要两个 listViews 的行高相同。问题是在运行时间之前我不知道高度会是多少。
也就是说,两者的高度都将设置为 Auto,并且在呈现控件时,一个 listView 的行将在 ActualHeight = 30 处,另一个在 ActualHeight = 40 处。我希望它们都是 40。
如果 ListViews 使用共享项目模板,您只需将 GridViewRowPresenter 包装在网格中,然后在该网格的唯一行上使用 SharedSizeGroup。这是如何实现的。
XAML
<UserControl x:Class="WpfApplication1.UserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="300"
d:DesignWidth="300"
mc:Ignorable="d">
<UserControl.Resources>
<GridViewColumnCollection x:Key="GridViewColumns">
<GridViewColumn Width="100"
DisplayMemberBinding="{Binding Path=Text}"
Header="Text" />
</GridViewColumnCollection>
<DataTemplate x:Key="RowTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="RowSizeGroup" />
</Grid.RowDefinitions>
<Border BorderBrush="Black" BorderThickness="1">
<GridViewRowPresenter Columns="{StaticResource GridViewColumns}" />
</Border>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid IsSharedSizeScope="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<GridViewHeaderRowPresenter Columns="{StaticResource GridViewColumns}" />
<ListView Grid.Row="1"
ItemTemplate="{StaticResource RowTemplate}"
ItemsSource="{Binding Path=Items1}" />
<ListView Grid.Row="2"
ItemTemplate="{StaticResource RowTemplate}"
ItemsSource="{Binding Path=Items2}" />
</Grid>
</UserControl>
代码隐藏(供参考,但不是很重要)
using System.Collections.ObjectModel;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for UserControl2.xaml
/// </summary>
public partial class UserControl2
{
public UserControl2()
{
InitializeComponent();
DataContext = this;
Items1 = new ObservableCollection<object>
{
new Item {Text = "Hello World!"},
new Item {Text = "Hello \nWorld!"}
};
Items2 = new ObservableCollection<object>
{
new Item {Text = "Testing 1\n2\n3"}
};
}
private class Item
{
public string Text { get; set; }
}
public ObservableCollection<object> Items1 { get; private set; }
public ObservableCollection<object> Items2 { get; private set; }
}
}
如果要明确设置行的高度,只需替换<RowDefinition Height="Auto" SharedSizeGroup="RowSizeGroup" />
为<RowDefinition Height="40" SharedSizeGroup="RowSizeGroup" />
40 在这种情况下是特定高度。