为什么ExtentWidth保持在10.003?

时间:2012-09-05 23:48:44

标签: wpf listbox richtextbox

所以我有一个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()
    {
    }
}
}

1 个答案:

答案 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。