2013-02-08 4 views
0

GridViewRowPresenters를 사용하는 두 개의 listView가있는 사용자 지정 컨트롤이 있습니다. 두 listViews의 행 높이가 동일해야합니다. 캐치는 실행 시간까지의 높이를 알 수 없습니다.두 목록보기 행의 높이 연결

입니다

, 모두가 자신의 높이가 자동으로 설정되고 제어가 하나 개의 목록보기가의 ActualHeight에 내가 원하는의 ActualHeight = 40에서 다른 = (30)의 행이됩니다 렌더링 될 때 그들 모두가 될 40

답변

0

ListView에서 공유 항목 템플릿을 사용하는 경우 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은 특정 높이입니다.

관련 문제