伸展到现有空间的边界

时间:2017-12-27 22:09:08

标签: wpf xaml

我有这个:

<Border Background="Gray">
   <TextBlock x:Name="Text" 
              Text="{Binding Name}" 
              Margin="0, 5" 
              FontSize="16"/>
</Border>

看起来像这样:(有三个)

enter image description here

我希望它看起来像这样:

enter image description here

(边框拉伸到空间的末端+对边框高度的一些控制。)

P.S。我没有必要使用边框,任何能达到同样效果的东西都可以。

更新:这是ListBoxItem的DataTemplate的一部分。它的定义方式如下:

<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <Border>
                <TextBlock x:Name="Text"
                       Text="{Binding Name}" 
                       Margin="0, 5" 
                       FontSize="16"/>
            </Border>
        </DataTemplate>
    </Setter.Value>
</Setter>

我尝试将Horizo​​ntalAlignment设置为“Stretch”,但它不起作用。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

如果您的StackPanel号码已修复,则TextBlock将有效:

<StackPanel Grid.Column="1">
    <StackPanel.Resources>
        <Style x:Key="style1" TargetType="{x:Type TextBlock}">
            <Setter Property="Margin" Value="0,5" />
            <Setter Property="FontSize" Value="16" />
            <Setter Property="Background" Value="Gray" />
            <Setter Property="Foreground" Value="White" />
        </Style>
    </StackPanel.Resources>
    <TextBlock Text="Text 1" Style="{StaticResource style1}" />
    <TextBlock Text="Text 2" Style="{StaticResource style1}" />
    <TextBlock Text="Text 3" Style="{StaticResource style1}" />
</StackPanel>

或者如果基于某些数据源生成TextBlock,请使用ItemsControl

<ItemsControl ItemsSource="{Binding}" >
    <ItemsControl.Resources>
        <Style x:Key="style1" TargetType="{x:Type TextBlock}">
            <Setter Property="Margin" Value="0,5" />
            <Setter Property="FontSize" Value="16" />
            <Setter Property="Background" Value="Gray" />
            <Setter Property="Foreground" Value="White" />
        </Style>
    </ItemsControl.Resources>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock x:Name="Text" Style="{StaticResource style1}"  Text="{Binding Name}"  />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

答案 1 :(得分:1)

最简单的方法是使用网格行。 这是一个例子:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="10"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="10"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" Text="text 1" Background="gray"/>
    <TextBlock Grid.Row="2" Text="text 2" Background="gray"/>
    <TextBlock Grid.Row="4" Text="text 3" Background="gray"/>

</Grid>

答案 2 :(得分:0)

试试这个......

<Border Background="Gray" HorizontalAlignment="Stretch">
 <TextBlock x:Name="Text" 
          HorizontalAlignment="Left"
          Text="{Binding Name}" 
          Margin="0, 5" 
          FontSize="16"/>
</Border>

答案 3 :(得分:0)

最后我发现这是完成我想要的最简单的解决方案:

  • 我创建了一个网格(有一列和一行)
  • 我在里面创建一个Rectangle(它会自动延伸到网格空间)
  • 我创建了一个textBox(自动呈现矩形的

以下是它的样子:

<Grid>
    <Rectangle x:Name="fillColor" Fill="..."/>
    <TextBox ... />
</Grid>