2010-12-31 18 views
1

ボタンを押したときにテキストボックスの値をすべてクリアしたいのですが、このコードはwinformでうまく動作しますが、wpfでこの同じコードを使用しようとするとこのエラーが発生します。コントロールの位置。ここにコードがあります。私に解決策を教えてください。wpfで複数のテキストボックスの値をクリアする

foreach (Control c in this.Controls)     
    if (c is TextBox) 
     (c as TextBox).Clear(); 
+0

コードとしてコードをフォーマットするには、各行の前に4つのスペースを入れる必要があります。それにもボタンがあり、これは '{}'のように見えます。私はあなたのためにこれをしました。 –

+0

どのようなエラーがありますか?コンパイラ、実行時例外?メッセージは何ですか? – ChrisF

+0

「this」の種類は何ですか?私はWPF要素が 'Controls'プロパティを公開しているとは思っていませんが、' this'が 'Panel'から派生している場合は、[' Children'](http://msdn.microsoft.com/en-us代わりに、/library/system.windows.controls.panel.children.aspx)プロパティを使用します。 –

答えて

0

VisualTreeHelper.GetChild()を使用してください。たとえば、あなたのテキストボックスがStackPanelNewと呼ばStackPanelの内側にある場合、私はあなたの質問を解決するためにWPFのためのMVVMパターンに探してお勧めします

for (int i = 0;i < VisualTreeHelper.GetChildrenCount(this.StackPanelNew);i++) { 
    TextBox txt = VisualTreeHelper.GetChild(this.StackPanelNew, i) as TextBox; 
    if (txt != null) 
    { 
     //do stuff 
    } 
    } 
+0

ブラザーこのコードは動作していません。ちょうどこのようにこのコードを置き換えます(int i = 0; i

1

を使用しています。

ビュー(XAML)のテキストボックスとボタンをビューモデル(クラス)にバインドすると、buttonコマンドでテキストボックスの値を直接クリアできます。 CinchMVVM lightのような多くの優れたMVVMフレームワークが用意されています。ここで

はシンチを使用するサンプルですが、重要なのは次のとおりです。行0で
1.テキストボックスは、双方向の行1で 2のTextBoxが双方向のテキスト2
行の 3.ボタンへの結合を使用してテキスト1
への結合を使用しています図2は、コマンドがここ

をString.Emptyをするために[テキスト1]と[テキスト2]を設定しますClearcommandへの結合を使用するビューである:ここでは

<Window x:Class="TextboxClear.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:meffed="clr-namespace:MEFedMVVM.ViewModelLocator;assembly=MEFedMVVM.WPF" 
    meffed:ViewModelLocator.ViewModel="MainWindowViewModel"    
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <TextBox Grid.Row="0" Text="{Binding Path=Text1, Mode=TwoWay}"/> 
    <TextBox Grid.Row="1" Text="{Binding Path=Text2, Mode=TwoWay}"/> 
    <Button Grid.Row="2" Content="Clear" Command="{Binding Path=ClearCommand}"/> 
    </Grid> 
</Window> 

は、ビューモデルである:

using System; 
using System.ComponentModel.Composition; 
using Cinch; 
using MEFedMVVM.ViewModelLocator; 

namespace TextboxClear.ViewModels 
{ 
    [ExportViewModel("MainWindowViewModel")] 
    [PartCreationPolicy(CreationPolicy.Shared)] 
    public class MainWindowViewModel : ViewModelBase 
    { 
    [ImportingConstructor] 
    public MainWindowViewModel() 
    { 
     ClearCommand = new SimpleCommand<Object, Object>(CanExecuteClearCommand, ExecuteClearCommand); 
    } 

    private string _text1 = string.Empty; 
    public string Text1 
    { 
     get 
     { 
     return _text1; 
     } 
     set 
     { 
     _text1 = value; 
     NotifyPropertyChanged("Text1"); 
     } 
    } 

    private string _text2 = string.Empty; 
    public string Text2 
    { 
     get 
     { 
     return _text2; 
     } 
     set 
     { 
     _text2 = value; 
     NotifyPropertyChanged("Text2"); 
     } 
    } 

    public SimpleCommand<Object, Object> ClearCommand { get; private set; } 
    private void ExecuteClearCommand(Object args) 
    { 
     Text1 = string.Empty; 
     Text2 = string.Empty; 
    } 

    private bool CanExecuteClearCommand(Object args) 
    { 
     return true; 
    } 
    } 
}