0

GridViewRowPresentersを使用する2つのlistViewを持つカスタムコントロールがあります。2つのlistViewの行の高さを同じにする必要があります。キャッチは、実行時まで高さがどうなるかわからないということです。

つまり、両方の高さがAutoに設定され、コントロールがレンダリングされると、一方のlistViewの行がActualHeight = 30になり、もう一方の行がActualHeight=40になります。両方を40にします。

4

1 に答える 1

0

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" />。この場合は特定の高さです。

于 2013-02-08T06:04:24.207 に答える