Wpf 为什么只有在我指定TexBlock宽度时,网格中TextBlock的textwarking才会起作用?
为什么只有在我指定TexBlock宽度时,网格中TextBlock的textwarking才会起作用 删除TextBlock MaxWidth属性时,TextWrapping不起作用 组合框的完整代码Wpf 为什么只有在我指定TexBlock宽度时,网格中TextBlock的textwarking才会起作用?,wpf,xaml,Wpf,Xaml,为什么只有在我指定TexBlock宽度时,网格中TextBlock的textwarking才会起作用 删除TextBlock MaxWidth属性时,TextWrapping不起作用 组合框的完整代码 <Window Height="600" Width="480"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="4*"></C
<Window Height="600" Width="480">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<ComboBox Grid.Row="0" Grid.Column="0" ItemsSource="{Binding MyList}" SelectedIndex="0" x:Name="comboBox" HorizontalAlignment="Stretch" VerticalAlignment="Top">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="2" Text="{Binding Code}"></TextBlock>
<TextBlock Margin="2" Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="50"/>
<ColumnDefinition Name="Column1" MaxWidth="300"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Code}"/>
<TextBlock Grid.Column="1" MaxWidth="{Binding ElementName=Column1, Path=MaxWidth}" Text="{Binding Name}" TextWrapping="Wrap"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
</Grid>
</Window>
原因是,通过将列定义定义为
Auto
或*
或而根本不设置它
,您没有任何东西可以限制文本块的可用大小。因此,预期文本不会换行。因此,您必须直接在ColumnDefinition或TextBlock上定义一个Width或MaxWidth,以便进行包装
为什么只有在我指定TexBlock宽度时,网格中TextBlock的textwarking才会起作用
因为当组合框打开时,网格被添加到一个不可见的ScrollViewer中。您可以通过简单地将组合框的ScrollViewer.HorizontalScrollBarVisibility attached属性设置为Disabled来修复此问题并获取要包装的文本:
<ComboBox Grid.Row="0" Grid.Column="0" ItemsSource="{Binding MyList}"
SelectedIndex="0" x:Name="comboBox" HorizontalAlignment="Stretch"
VerticalAlignment="Top" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="2" Text="{Binding Code}"></TextBlock>
<TextBlock Margin="2" Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Width="100" />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="50"/>
<ColumnDefinition MaxWidth="300"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Code..."/>
<TextBlock Grid.Column="1"
Text="some long text some long text some long text some long text some long text"
TextWrapping="Wrap"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
请提供您的问题的完整可复制样本。例如,网格的父元素是什么?可能与我为combobox添加的完整代码重复。您还应该包括combobox的所有父元素,一直到父窗口。请提供任何人都可以按原样运行的最小示例。已更新ColumnDefinition的my postI defined MaxWidth,但TextWrapp不起作用。仅当我为TextBlock定义MaxWidth时,它才起作用。为什么?不指定列的宽度将导致文本框数据溢出列。相反,您可以尝试为列和文本框指定固定宽度。实际上,需要强制指定textbox maxwidth才能进行包装。否则,在输入文本时,其宽度将自动增加。