0

Windows 8 アプリを作成していますが、TextBox 要素の GotFocus イベント中にイベントを発生させる必要があります。何が問題なのか、どちらの方向に進むべきなのかわからない 1. そもそも C# のイベントが苦手で、2. WindowsRT では少し違うと思います。TextBoxListArray() メソッドは、別のイベントを通じて開始されます。

public sealed partial class MainPage : Page
{
    List<TextBox> textBox = new List<TextBox>();
    List<RichEditBox> editBox = new List<RichEditBox>();
    static int tally;
    public MainPage()
    {
        this.InitializeComponent();
    }

    private void TextBoxListArray()
    {
        textBox.Add(new TextBox());
        int i = textBox.Count();
        i = i - 1;
        tally = i - 1;
        textBox[i].HorizontalAlignment = HorizontalAlignment.Stretch;
        textBox[i].VerticalAlignment = VerticalAlignment.Top;
        textBox[i].TextWrapping = TextWrapping.NoWrap;
        textBox[i].Margin = new Thickness(10);
        textBox[i].Text = i.ToString();
        textBox[i].IsReadOnly = true;
        textBox[i].Height = 40;
        stackNotes.Children.Add(textBox[i]);
        textBox[i].GotFocus += new EventHandler(TextBoxList_GotFocus);
    }

    private void TextBoxList_GotFocus(object sender, RoutedEventArgs e)
    {
        textBox[tally] = sender as TextBox;
        textBox[tally].Background = new SolidColorBrush(Colors.Yellow); 
    }
}
4

3 に答える 3

3

これは、right wayWPF (または XAML ベースの UI フレームワークのいずれか) で探していることを行うためのものです。

<Window x:Class="MiscSamples.TextBoxItemsControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxItemsControlSample" Height="300" Width="300">
    <ItemsControl ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBox Text="{Binding Path=.}" x:Name="TextBox"/>
                <DataTemplate.Triggers>
                    <Trigger SourceName="TextBox" Property="IsKeyboardFocusWithin" Value="True">
                        <Setter TargetName="TextBox" Property="Background" Value="Yellow"/>
                    </Trigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Window>

コードビハインド:

public partial class TextBoxItemsControlSample : Window
{
    public TextBoxItemsControlSample()
    {
        InitializeComponent();

        DataContext = Enumerable.Range(0, 100).Select(x => "Text" + x.ToString());

    }
}

結果:

ここに画像の説明を入力

  • singleUI 要素を操作するコード行はありません。あなたはそれを必要としません。DataBindingは、恐竜の UI フレームワークに多用されていたすべての恐ろしいハックの必要性を取り除くのに十分強力です。
  • は、特定の TextBox に対して true の場合はTrigger常に、TextBox の Background を黄色にします。IsKeyboardFocusWithinこれにより、手続き型アプローチの必要性がなくなります。
  • これは WinRT XAML ではテストしていません。違いがある場合があります (プロパティ名の違いなど)。
  • ItemsControlのプロパティ( など)を定義することで、UI をさらにカスタマイズできますItemsPanel
  • WPF / XAML がうまくいきます。私のコードをコピーして a に貼り付けるだけで、File -> New Project -> WPF Application自分で結果を確認できます。
于 2013-09-17T03:10:16.450 に答える
0

これを機能させるために私がしたことは次のとおりです。それは間違いなくハックですが、必要な結果が得られました。また、XAML を使用して「適切な」方法で試してみます。

private void TextBoxListArray()
    {
        textBox.Add(new TextBox());
        int i = textBox.Count();
        i = i - 1;
        tally = i - 1;
        textBox[i].HorizontalAlignment = HorizontalAlignment.Stretch;
        textBox[i].VerticalAlignment = VerticalAlignment.Top;
        textBox[i].TextWrapping = TextWrapping.NoWrap;
        textBox[i].Margin = new Thickness(10);
        textBox[i].Text = i.ToString();
        textBox[i].IsReadOnly = true;
        textBox[i].Height = 40;
        stackNotes.Children.Add(textBox[i]);
        textBox[i].GotFocus += new RoutedEventHandler(TextBoxList_GotFocus);
        textBox[i].LostFocus += new RoutedEventHandler(TextBoxList_LostFocus);
    }

    private void TextBoxList_GotFocus(object sender, RoutedEventArgs e)
    {
        TextBox textBoxSender = sender as TextBox;
        textBoxSender.Background = new SolidColorBrush(Colors.Beige);
    }

    private void TextBoxList_LostFocus(object sender, RoutedEventArgs e)
    {
        TextBox textBoxSender = sender as TextBox;
        textBoxSender.Background = new SolidColorBrush(Colors.White);
    }
于 2013-09-17T03:17:02.713 に答える