c# - WPF MVVM 在您键入时更改文本框大小

标签 c# .net wpf xaml mvvm

我有一个 TextBox,随着它的内容增长,我希望它增长,随着它的内容缩小,我希望它的高度和宽度都缩小。这可以通过 Hook 到 TextBox 中的 TextChanged 事件来轻松实现,这意味着代码隐藏,我们应该在 MVVM 中避免这种情况。所以问题是我们如何在 MVVM 中做到这一点?我们显然必须使用命令(实现 ICommand 接口(interface)的类),同时我们不能将命令 Hook 到事件。

一种选择是使用 System.Windows.Interactivity。我以前用过它,它非常简洁,但实际上有些人可能会反对它,因为它更多地使用 Silverlight 库。

还有其他选择吗?

一个更简单的 XAML。请注意,我希望窗口改变它的大小,因为 TextBox 占据了整个窗口:

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

最佳答案

文本框随着文本的变化缩小/增长:

<TextBox HorizontalAlignment="Left" Width="Auto" MinWidth="10"/>
  • 仅限 XAML 的解决方案。
  • 后面没有代码,
  • 没有 System.Windows.Interactivity .
  • 并且不要将与大小相关的东西放在它们不属于的 ViewModel 中。

  • 然后再次:
  • MVVM 并不是要避免代码落后。这是关于将 UI 从业务/应用程序逻辑和数据中分离出来。
  • System.Windows.Interactivity 与 Silverlight 一样多是 WPF,所以我不知道“某些人”在说什么,但它的使用是完全有效的
  • 关于c# - WPF MVVM 在您键入时更改文本框大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734800/

    相关文章:

    c# - Xamarin Forms 两种方式绑定(bind)ActivityIndi​​cator

    c# - 如何知道是否有一轮是由 parent 引起的(A=>B=>C=>A)

    c# - 从 C# 错误打开 Office 2010 文档

    c# - 获取类型的转换器

    c# - 导出到 excel 的 RadGrid telerik 问题

    c# - "could not be loaded"是通过重启修复的错误吗?

    .net - 如果我有一个工厂方法,不同的实现需要不同的参数,我该怎么办?

    c# - 使用 Prism 设置数据上下文

    c# - 如何将动态DoubleAnimation设置为To或From值

    wpf - 选项卡中的项目控制组