簡體   English   中英

WPF多行文本框不呈現為多行

[英]WPF multiline TextBox does not render as multiline

在窗口中具有以下帶有網格的XAML(它可能是窗口中的唯一元素):

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TextBox Grid.Row="0" SpellCheck.IsEnabled="True" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" MinLines="5" MaxLines="5">
        Any text
    </TextBox>
</Grid>

當我運行應用程序時,TextBox不會是多行的: 沒有多行的文本框

但是,當我在TextBox中進行任何編輯時,它會立即正確重新渲染: 編輯后的文本框

是什么原因導致此問題以及如何解決(如果可能,我希望不要破解任何東西)?

所以在玩了一段時間之后,我通過將文本綁定到ViewModel中的屬性來使其工作

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TextBox Grid.Row="0" 
             SpellCheck.IsEnabled="True" 
             TextWrapping="Wrap"
             AcceptsTab="True" 
             MinLines="5"
             MaxLines="5"
             Text="{Binding Text}">
    </TextBox>
</Grid>

public class MainWindowViewModel : INotifyPropertyChanged
{
    public MainWindowViewModel()
    {
        Text = "My Text";
    }

    public string Text { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

這使我認為問題與WPF將控件呈現到屏幕的順序有關,但不確定到底是什么。 這不能回答您為什么會這樣的問題,但是,由於MVVM WPF應用程序中文本框的常見用法是通過綁定而不是硬編碼的文本完成的,因此作為解決方案就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM