2012-09-05 117 views
2

所以我有一个ListBox有一个DataTemplate它有一个网格有RichTextBox。 由于某些原因,当您键入RichTextBox时,它会将每个字符放在单独的行中。深入研究,我发现ExtentWidth等于10.003。为什么?我不知道。我希望有人能向我解释为什么,并给出一个很好的解决方案,让它停止这样做。为什么ExtentWidth保持在10.003?

我注意到如果你在网格的列上设置一个宽度,它会修复它,但我不希望我的网格列上有一个静态宽度。

下面是一个问题的例子。我使用.NET 4.0和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

于是我想出了一个解决方法。如果您将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> 

注意我还设置了CanUserResizeColumnsFalse,因为如果你不和他们调整它们的大小,该ExtentWidth会弹回至10