0

私は単純な Windows 8 ストア アプリを作成しています。ダブルクリック (タップ) して編集したいと考えています。

私は次のようなことを考えていました。

void editProducer(object sender, DoubleTappedRoutedEventArgs e)
{
    var t = new TextBox() {FontSize = 48, Width = 600, DataContext = DataModel.Producer};
    var f = new Flyout() {Content = t};
    f.ShowAt((FrameworkElement)sender);
}

しかし、私はそのバージョンを動作させることができませんでした。

何を見逃しましたか (バインディングを追加しようとして失敗しました)? それとも、このようにしようとするのは完全に間違っていますか?

アップデート;

このコードはほとんど機能するように見え、元の方向に近づいていましたが、それでも機能しませんでした。

var srcTextBlock = sender as TextBox;
var d = srcTextBlock.GetBindingExpression(TextBlock.TextProperty);
var t = new TextBlock() { FontSize = 48, Width = 200 };
t.SetBinding(TextBlock.TextProperty, d.ParentBinding);
var f = new Flyout() { Content = t };
f.ShowAt((FrameworkElement)sender);

そのため、提案された方向性に基づいて、最終的には今のところこのようなものを使用しました。

var tb = (TextBox) sender;
tb.IsReadOnly = false;
tb.SelectedText = tb.Text;
tb.LostFocus += (o, args) => { tb.IsReadOnly = true; };
4

1 に答える 1

0

これを行うより簡単な方法は、無効 (が false)のTextBlock場合のように見えるカスタム スタイルを持つシンプルな TextBox を使用することです。IsEnabled

したがって、このイベントをテキスト フィールドにアタッチして (ダブルタップで) 機能させる必要があります。

void editProducer(object sender, DoubleTappedRoutedEventArgs e)
{
  (sender as TexBlock).IsEnabled = ! (sender as TexBlock).IsEnabled
}
于 2013-11-12T10:40:31.270 に答える