我有一个TextBox,随着内容的增长,我希望它增长,随着内容的缩小,我希望它的高度和宽度都会缩小。这可以通过挂钩到TextBox中的TextChanged事件来轻松实现,这意味着代码隐藏,这是我们在MVVM中应该避免的。所以问题是我们如何在MVVM中做到这一点?我们必须明显使用命令(实现ICommand接口的类),同时我们不能将命令挂钩到事件。
一种选择是使用System.Windows.Interactivity。我之前使用它并且它非常整洁,但是有些人可能实际上反对它,因为它使用了更多的Silverlight库。
还有其他选择吗?
更简单的XAML。请注意,我希望Window改变它的大小,因为TextBox占据了整个Window:
<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>
答案 0 :(得分:6)
文本框收缩/增长为文本更改:
<TextBox HorizontalAlignment="Left" Width="Auto" MinWidth="10"/>
System.Windows.Interactivity
。 再次:
答案 1 :(得分:1)
只需将Width属性设置为'Auto'即可实现此目的。
<TextBox Width="Auto" />
谢谢, 拉梅什
答案 2 :(得分:0)
使用System.Windows.Interactivity创建一个Behavior。这是封装代码的最佳方式,否则这些代码将最终出现在代码隐藏
中