如何在 WPF 中将宽度设置为 100%

发布于 2024-07-18 03:48:11 字数 1317 浏览 5 评论 0原文

有没有办法告诉 WPF 中的组件占用 100% 的可用空间?

就像

width: 100%;  

在 CSS 中

一样,我有这个 XAML,但我不知道如何强制 Grid 采用 100% 宽度。

<ListBox Name="lstConnections">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Grid Background="LightPink">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"/>
          <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"/>
          <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Path=User}" Margin="4"></TextBlock>
        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=Password}" Margin="4"></TextBlock>
        <TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Path=Host}" Margin="4"></TextBlock>
      </Grid>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

结果看起来像

替代文字 http://foto.darth.cz/pictures/wpf_width.jpg

我把它变成了粉红色所以很明显它占用了多少空间。 我需要将粉色网格设置为 100% 宽度。

Is there any way how to tell component in WPF to take 100% of available space?

Like

width: 100%;  

in CSS

I've got this XAML, and I don't know how to force Grid to take 100% width.

<ListBox Name="lstConnections">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Grid Background="LightPink">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"/>
          <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"/>
          <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Path=User}" Margin="4"></TextBlock>
        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=Password}" Margin="4"></TextBlock>
        <TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Path=Host}" Margin="4"></TextBlock>
      </Grid>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

Result looks like

alt text http://foto.darth.cz/pictures/wpf_width.jpg

I made it pink so it's obvious how much space does it take. I need to make the pink grid 100% width.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

红颜悴 2024-07-25 03:48:11

它是 Grid 的容器,它决定了它的宽度。 在本例中,这是一个 ListBoxItem,默认情况下左对齐。 您可以将其设置为拉伸,如下所示:

<ListBox>
    <!-- other XAML omitted, you just need to add the following bit -->
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

It is the container of the Grid that is imposing on its width. In this case, that's a ListBoxItem, which is left-aligned by default. You can set it to stretch as follows:

<ListBox>
    <!-- other XAML omitted, you just need to add the following bit -->
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
北座城市 2024-07-25 03:48:11

您可以使用 Horizo​​ntalContentAlignment="Stretch",如下所示:

<ListBox HorizontalContentAlignment="Stretch"/>

You could use HorizontalContentAlignment="Stretch" as follows:

<ListBox HorizontalContentAlignment="Stretch"/>
日久见人心 2024-07-25 03:48:11

对我来说,在具有 2 列和 2 行的 Grid 内使用组件时,使用 Grid.ColumnSpan="2" Grid.RowSpan="2",使其跨越列:

<Grid Margin="50">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="5*"/>
        <ColumnDefinition Width="4*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
  
    <!-- InputStackPanel -->
    <local:InputStackPanel Grid.ColumnSpan="2" Grid.RowSpan="2" InputsSource="{Binding droppedInputs}"/>

    
</Grid>

What worked for me, with a component inside a Grid with 2 columns and 2 rows, was to use Grid.ColumnSpan="2" Grid.RowSpan="2", to make it span across the columns:

<Grid Margin="50">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="5*"/>
        <ColumnDefinition Width="4*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
  
    <!-- InputStackPanel -->
    <local:InputStackPanel Grid.ColumnSpan="2" Grid.RowSpan="2" InputsSource="{Binding droppedInputs}"/>

    
</Grid>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文