WPF MVVM在输入时更改文本框大小

本文关键字:文本 MVVM 输入 WPF | 更新日期: 2023-09-27 18:06:50

我有一个文本框,随着它的内容增长,我希望它增长,随着它的内容缩小,我希望它在高度和宽度方面都缩小。这可以很容易地通过与TextBox中的TextChanged事件挂钩来实现,这意味着代码隐藏,这是我们应该在MVVM中避免的。问题是我们如何在MVVM中做到这一点?我们显然必须使用命令(类实现命令接口),同时我们不能将命令与事件挂钩。

一个选择是使用System.Windows.Interactivity。我以前用过它,它很简洁,但有些人可能会反对它,因为它有更多的Silverlight库可供使用。

还有其他选项吗?

更简单的XAML。请注意,我希望窗口改变它的大小,因为文本框占用了整个窗口:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid HorizontalAlignment="Stretch">
        <TextBox Width="Auto">            
        </TextBox>
    </Grid>
</Window>
这是我的XAML:
<Window x:Class="SleekNoteUI.Views.SleekNoteView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    <Window.Template>
        <ControlTemplate>
            <Border...>
                <Grid>
                    <Grid Grid.Row="1" x:Name="noteGrid">
                        <TextBox Grid.Row="0"
                                 Text="{Binding SomeText...}"
                                 Background="{Binding...}">
            </TextBox>
        </Grid>
        </Grid>
    </Border>
    </ControlTemplate>
</Window.Template>
</Window>

WPF MVVM在输入时更改文本框大小

文本框随文本变化收缩/增大:

<TextBox HorizontalAlignment="Left" Width="Auto" MinWidth="10"/>
  • XAML-only解决方案。
  • 后面没有代码,
  • No System.Windows.Interactivity
  • 不把尺寸相关的东西放在ViewModel中,它们不属于。

:

  • MVVM不是为了避免代码滞后。它是关于将UI与业务/应用程序逻辑和数据分离。
  • System.Windows。WPF的交互性和Silverlight一样多,所以我不知道"一些人"在说什么,但它的使用是完全有效的

只需将Width属性设置为" Auto ",就可以实现这一点。

<TextBox Width="Auto" />

谢谢,拉梅什

using System.Windows.Interactivity创建一个Behavior。这是封装代码的最佳方式,否则将以代码隐藏

结束。