GridViewRowPresentersを使用する2つのlistViewを持つカスタムコントロールがあります。2つのlistViewの行の高さを同じにする必要があります。キャッチは、実行時まで高さがどうなるかわからないということです。
つまり、両方の高さがAutoに設定され、コントロールがレンダリングされると、一方のlistViewの行がActualHeight = 30になり、もう一方の行がActualHeight=40になります。両方を40にします。
GridViewRowPresentersを使用する2つのlistViewを持つカスタムコントロールがあります。2つのlistViewの行の高さを同じにする必要があります。キャッチは、実行時まで高さがどうなるかわからないということです。
つまり、両方の高さが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; }
}
}
行の高さを明示的に設定する場合は、40に置き換え<RowDefinition Height="Auto" SharedSizeGroup="RowSizeGroup" />
てください<RowDefinition Height="40" SharedSizeGroup="RowSizeGroup" />
。この場合は特定の高さです。