【问题标题】:Design Xaml grid with height = 100% and minimum row height size设计高度 = 100% 和最小行高大小的 Xaml 网格
【发布时间】:2014-03-11 22:32:33
【问题描述】:

这就是问题所在。我有一个网格,其中包含一些用 xaml 编写的数据:

    <ItemsControl x:Name="ItemsControl" ItemsSource="{Binding Path=MyObjectCollection, UpdateSourceTrigger = PropertyChanged}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid Width="Auto">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="27"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="30"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" MaxHeight="75" MinHeight="30"></RowDefinition>
                    </Grid.RowDefinitions>

                    <Label Name="LabelNumber" Content="{Binding ObjectID}" Grid.Column="0" Style="{StaticResource MyStyleLabel}" />
                    <control:FocusMeterControl x:Name="HorizontalFocusMeterControl" Value="{Binding ObjectProperty}" Height="Auto" Grid.Column="1" />

                    <Button Name="RemoveObject" Content="-" Grid.Column="2" Margin="5,0,0,0" Click="ButtonBase_OnClick" Tag="{Binding Point}" Style="{StaticResource MyStyleButton}" />

                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

如您所见,我正在为“MyObjectCollection”中的每个成员创建一个新网格。理想情况下,我认为我应该只创建一行,因为这会使我的下一个问题——真正的问题更容易。

但是,如果可能的话,我还没有找到在 xaml 中执行此操作的任何好方法。如果不从 c# 手动填充集合并手动在我的对象中设置行属性以执行类似的操作,这是否可行

<Label Name="LabelNumber" Grid.Row="{Binding ManuallyCalculatedRowID}" ... />

我的主要问题是我希望网格/行都一样高,如果可能的话,填写父窗口。如果父窗口太大,应该应用 MaxHeight,我只想在下面留一些空白。

父控件是一个 Windows 窗体 ElementHost,如果这有什么不同的话。

如果您需要任何其他信息,请告诉我。

【问题讨论】:

    标签: c# wpf xaml layout grid


    【解决方案1】:

    要使所有行的高度相等,我们可以使用ItemsPanelTemplate 并将其设置为UniformGrid,这将解决大小相等的问题:

    <ItemsControl x:Name="ItemsControl" ItemsSource="{Binding Path=MyObjectCollection, UpdateSourceTrigger = PropertyChanged}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="1" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid Width="Auto">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="27"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="30"/>
                    </Grid.ColumnDefinitions>
    
                    <Label Name="LabelNumber" Content="{Binding ObjectID}" Grid.Column="0" Style="{StaticResource MyStyleLabel}" />
                    <control:FocusMeterControl x:Name="HorizontalFocusMeterControl" Value="{Binding ObjectProperty}" Height="Auto" Grid.Column="1" />
    
                    <Button Name="RemoveObject" Content="-" Grid.Column="2" Margin="5,0,0,0" Click="ButtonBase_OnClick" Tag="{Binding Point}" Style="{StaticResource MyStyleButton}" />
    
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    

    请注意,我删除了 ItemTemplate 中的行定义以解除项目的垂直大小限制。不确定这是否能回答您的问题,但这可能是解决问题的良好起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多