2012-09-05 47 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

相關問題