2

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

1 回答 1

0

所以我想出了一个解决方法。如果您将a 换成ListBoxaDataGridDataGridTemplateColumnsWidthTemplateColumn 设置为的一起使用,"*"那么它似乎可以工作。

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

于 2012-09-10T18:37:20.633 回答