所以我有一个ListBox
,其中DataTemplate
的网格格式为RichTextBox
。
出于某种原因,当您键入RichTextBox
时,它会将每个字符放在一个单独的行上。深入研究,我发现ExtentWidth
等于10.003。为什么?我不知道。我希望有人可以向我解释原因,并给出一个很好的解决方案,让它停止这样做。
我注意到如果你在网格的列上设置一个宽度,它会修复它,但我不想在网格列上有静态宽度。
以下是问题的示例。我正在使用.Net 4和VS 2010。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<ListBox
DockPanel.Dock="Top"
x:Name="TestListBox">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:Test}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Grid.Column="0" Grid.Row="0" Text="{Binding Name}" />
<TextBlock Grid.Column="1" Grid.Row="0" Text="Test" />
<RichTextBox
Grid.Column="1" Grid.Row="1"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<local:Test Name="Test1" />
<local:Test Name="Test2" />
</ListBox>
using System.Windows;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class Test
{
public string Name { get; set; }
public Test()
{
}
}
}
答案 0 :(得分:0)
所以我想出了一个解决方法。如果您为ListBox
换取DataGrid
并使用DataGridTemplateColumns
并将TemplateColumn的Width
设置为"*"
,那么它似乎可以正常工作。
<DataGrid
x:Name="TestDataGrid"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
>
<DataGrid.Columns >
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<RichTextBox />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<local:Test Name="Test1" />
<local:Test Name="Test2" />
</DataGrid>
注意我还将CanUserResizeColumns
设置为False
,因为如果您没有,并且他们调整了大小,ExtentWidth
将重新回到10。