0

ボタンを保持するカスタム コントロールを作成しました。ボタンは、2 行のグリッドを保持するようにスタイル設定されています。1 行目は画像、2 行目は TextBlock です。カスタム コントロールのイベント ハンドラーを作成しました。マウスがオブジェクトのパスに入ると、MouseEnter イベントが発生し、そこで TextBlock の FontSize と前景色を変更しようとしますが、コントロールは更新されません。対照的に、私は通常の TextBlock の (カスタム コントロールとコントロール テンプレートの一部ではない) プロパティを変更しようとしましたが、その場で正しく更新されました。

ここで何が欠けていますか?? イベント ハンドラのコードは次のとおりです。

private void ThemeButton_MouseEnter(object sender, MouseEventArgs e)
{
    InitializeProperties();

    TextElement.FontSize = 16;
    TextElement.Text = "new text";
    TextElement.Foreground = Brushes.Red;

    TextBlock element = MainWindow.FindChild<TextBlock>(MainWindow.StartWindow, "textField");
    element.Text = "new text for regular textblock";
    element.Foreground = Brushes.Red;
}

InitializeProperties は、TextElement(typeof TextBlock) および ImageElement(typeof Image) プロパティを初期化するメソッド ID です。null ではありません。プロパティは、通常の .NET プロパティです。

4

1 に答える 1

0

うわー...私の問題は、実際にはプロパティ(TextElementとImageElemenet)がテンプレート(カスタムコントロール)の要素を指していて、実際にウィンドウにレンダリングされた要素を指していないことでした...

要素を検索するときは、要素がビジュアル ツリーに入るように、常にレンダリングが完了してから検索を開始することを忘れないでください (つまり、ユーザー アクションがイベントなどを発生させたときに検索を開始します)。

于 2012-10-24T10:58:49.360 に答える