0

TextBox があり、そのコンテンツが大きくなるにつれて大きくなり、コンテンツが縮小するにつれて、高さと幅の両方を縮小したいと考えています。これは、TextBox の TextChanged イベントにフックすることで簡単に実現できます。これは、MVVM では避けるべきコード ビハインドを意味します。問題は、MVVM でこれをどのように行うかです。明らかにコマンド (ICommand インターフェイスを実装するクラス) を使用する必要がありますが、コマンドをイベントにフックすることはできません。

1 つのオプションは、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>
4

3 に答える 3

6

テキストの変更に合わせてテキストボックスを縮小/拡大:

<TextBox HorizontalAlignment="Left" Width="Auto" MinWidth="10"/>
  • XAML のみのソリューション。
  • コードビハインドなし、
  • いいえSystem.Windows.Interactivity
  • また、サイズ関連のものを、それらが属していないViewModelに入れません。

そしてまた:

  • MVVM はコード ビハインドを回避するためのものではありません。UI をビジネス/アプリケーション ロジックおよびデータから分離することです。
  • System.Windows.Interactivity は Silverlight と同じくらい WPF であるため、「何人かの人々」が何について話しているのかわかりませんが、その使用は完全に有効です
于 2013-04-01T01:30:18.270 に答える
1

Width プロパティを「Auto」に設定するだけで、これを実現できます。

<TextBox Width="Auto" />

ありがとう、ラメッシュ

于 2013-04-01T09:35:24.943 に答える
0

System.Windows.Interactivity を使用して動作を作成します。これは、コード ビハインドになってしまうコードをカプセル化する最良の方法です。

于 2014-01-17T22:05:19.230 に答える