2013-09-27 57 views
3

在Windows 8/RT XAML中是否有任何一种类似于WPF Grid.IsSharedSizeScope的简单(非自定义编码)?Grid.IsSharedSizeScope等效于Windows 8

我有ListViewItem s被分成3个水平部分,这3个列需要对齐(最宽的宽度)到所有绑定的ListViewItem

+0

托德你可以通过地铁解决方案:)为我工作。如果需要进一步修改,请告诉我:) – Anobik

回答

2

因为这是为wpf我找到了解决这个问题的Metro解决方案。我会在这里粘贴整个代码。 :)

<Page.Resources> 

    <DataTemplate x:Key="DataTemplate1" > 
     <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Gray"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <StackPanel Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <TextBlock Text="{Binding Name1}"/> 
      </StackPanel> 
      <StackPanel Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <TextBlock Text="{Binding Name2}"/> 

      </StackPanel> 
      <StackPanel Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <TextBlock Text="{Binding Name3}"/> 

      </StackPanel> 
     </Grid> 
    </DataTemplate> 
</Page.Resources> 

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 

    <ListView Name="MyList" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" VerticalAlignment="Stretch" Background="Yellow" ItemTemplate="{StaticResource DataTemplate1}"> 

     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
      </Style> 
     </ListView.ItemContainerStyle> 
     <ListView.ItemsPanel> 

      <ItemsPanelTemplate 
       <!-- Here is the panel that will contain the items --> 
       <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" Background="Pink" VerticalAlignment="Stretch"/> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
    </ListView> 
</Grid> 

和后面的代码。只是为了给一个尝试不使用MVVM

这里的CS

 List<test> li = new List<test>(); 
    /// <summary> 
    /// Invoked when this page is about to be displayed in a Frame. 
    /// </summary> 
    /// <param name="e">Event data that describes how this page was reached. The Parameter 
    /// property is typically used to configure the page.</param> 
    protected async override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      li.Add(new test() 
      { 
       Name1 = "Anobik1" + i.ToString(), 
       Name2 = "Anobik1"     +i.ToString(), 
       Name3 = "Anobik1"     +i.ToString() 
      }); 
     } 
     MyList.ItemsSource = li; 

    } 

和我绑定类是如下

class test 
{ 
    public string Name1 { get; set; } 
    public string Name2 { get; set; } 
    public string Name3 { get; set; } 
} 

希望这会有所帮助。

好的和最后的答案我没有编辑,因为这有点太长,想要显示我正在研究的整个演示,以便它可以让你受益。

+0

哇,这太棒了!正是我需要的。非常感谢Anobik! –

+0

谢谢高兴能​​帮到:) – Anobik

+0

你能解释一下/为什么它有效吗? –

1

下面是一个示例代码如何划分stackpanels里面的ListView

<ListView Name="MyList" ItemsSource="{Binding Path=MeasuringDeviceCommunicators}" > 
     <ListView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <!-- Here is the panel that will contain the items --> 
       <StackPanel Orientation="Vertical" Width="{Binding ActualWidth, ElementName= MyList}" /> 
      </ItemsPanelTemplate> 
     </ListView.ItemsPanel> 
     <ListView.ItemTemplate> 
      <DataTemplate > 
       <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" ></ColumnDefinition> 
         <ColumnDefinition Width="*"></ColumnDefinition> 
         <ColumnDefinition Width="*"></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <StackPanel Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></StackPanel> 
        <StackPanel Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></StackPanel> 
        <StackPanel Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></StackPanel> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

给一个试试你的内容会去三个面板的内部。虽然用于确定列表视图中项目方向的堆叠面板已设置为符合父级宽度,并且网格已被拉伸以符合父级宽度。

+0

这非常有希望,但它似乎只适用于WPF,不适用于Silverlight或WinRT。在SL和WRT页面上(如http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.frameworkelement.actualwidth.aspx),它表示“出于ElementName绑定的目的,ActualWidth不会在更新发布时发布更新(由于其异步和运行时计算性质)。不要尝试使用ActualWidth作为ElementName绑定的绑定源。如果您的场景需要基于ActualWidth进行更新,请使用SizeChanged处理程序。 –

+0

我也尝试过地铁xaml吗? – Anobik

+0

metro xaml = winrt。我在那里尝试过,但不幸的是它不工作。 –