2016-07-06 7 views
-2

私はかなり標準的なWPFアプリケーションを持っています。私はウィンドウを持っていて、ナビゲーションフレームが内部にあり、そこでページを読み込みます。私のすべてのページには、右下にあるUser Control(ナビゲーション)メニューと同様のテンプレートがあります。ユーザーコントロール上のテキストがナビゲーション後にスクランブルされる

時には(私はそれにパターンを検出することができません)usercontrol内のTextBlocksのいくつかは、完全修飾クラス、別の文字列、または全く何も書かれていない文字化けします。

これは、見えるようになっているものである: enter image description here

これは分前のように見えたものです:ユーザーコントロールのための enter image description here

XAMLコードは

<Grid Background="Transparent"> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Name="spNavigation" VerticalAlignment="Center" Margin="0,0,18,0"> 
     <TextBlock Text="N....N - 5" MouseUp="TextBox_MouseUp" Name="tbStockNav" Style="{StaticResource MenuDefault}"/> 
     <TextBlock Text="Orders" MouseUp="TextBox_MouseUp" Name="tbPatientsNav" Style="{StaticResource MenuDefault}"/> 
     <TextBlock Text="Recalls" MouseUp="TextBox_MouseUp" Name="tbRecallNav" Style="{StaticResource MenuDefault}"/> 
     <TextBlock Text="Messages" MouseUp="TextBox_MouseUp" Name="tbMessagesNav" Style="{StaticResource MenuDefault}"/> 
     <TextBlock Text="Users" MouseUp="TextBox_MouseUp" Name="tbUsersNav" Style="{StaticResource MenuDefault}"/> 
     <TextBlock Text="Home" MouseUp="TextBox_MouseUp" Name="tbHomeNav" Style="{StaticResource MenuDefault}"/> 
    </StackPanel> 

されており、新しいページを読み込むための関連するコードのビット。それは非常に簡単で、私の人生はなぜ私のテキストが文字化けしているのか理解できません。

private void TextBox_MouseUp(object sender, MouseButtonEventArgs e) 
    { 
     string text = (sender as TextBlock).Text; 
     openWindow(text); 
    } 

private void openWindow(string text) 
    { 
     NavigationService navigationService = NavigationService.GetNavigationService(this); 

     if (text == "Users") 
     { 
      navigationService.Navigate(new Uri("Pages/UsersPage.xaml", UriKind.Relative)); 
     } 

私はそれを修正する方法を理解することは興味深いですが、なぜこれも起こっているのです。

ありがとうございます。

EDIT:テキストボックスをしたDependencyPropertyから、背景色とパディングを除いて、変更されることはありません:

   int offset = Convert.ToInt16(Application.Current.TryFindResource("MenuOffset")); 
      activeTB.Background = BACKGROUND_COLOR; 
      activeTB.Padding = new Thickness(12,12+offset,12,12); 
      activeTB.Margin = new Thickness(0,-1*offset,0,0); 

スタイルはかなり単純です...

<Style x:Key="MenuDefault" TargetType="{x:Type TextBlock}"> 
    <Setter Property="FontSize" Value="19"/> 
    <Setter Property="Cursor" Value="Hand"/> 
    <Setter Property="Foreground" Value="White"/> 
    <Setter Property="Margin" Value="12"/> 
</Style> 

それはほとんどのように見えますポインタの問題。文字列値を表示するために間違ったオブジェクトに行きます。

+0

私はまだ書かれている多くのアプリケーションのうちの1つで 'Frame'と' Pages'を使用していません...標準と思われるものが...私はあなたがCaliburnのようなMVVM Frameworkを使用していないと思います。マイクロなど?すべてのコードビハインドは手続き的だと感じています。あなたの場合は、最初に_tbMessagesNav_のプロジェクト全体を検索し、その 'Text'がどこかで変更されているかどうかを確認してから、VSのVisual Tree Debuggerで特定のTextBlockを調べ、最後に' .Text = ' 'Text'プロパティを変更するものがあるかどうかを確認してください。あなたが経験するものは正常ではありません。 –

+0

私はこのプロジェクトでMVVMフレームワークを使用していません。 textblock.Textプロパティは決して変更されません。これは私が落ち着いている場所です。私はテキストブロック名の名前を変更しようとしましたが、おそらくどこか別の場所で参照されていたかもしれないと思っていましたが、何もしませんでした。 「あなたが経験するものは普通ではありません」したがって、私はここにいるのです; – Drew

答えて

0

MenuDefaultスタイルを詳しく見て、ここに投稿することを検討してください。そこにバインディングやトリガーがありますか?この動作は、Text型のプロパティをその型のオブジェクトにバインドしている場合に発生します。それ以外の場合は、xamlやコードビハインドにこれらのTextBlockを参照するものがありますか?投稿した内容から、TextBlockのTextプロパティが指定したもの以外の何かになる理由はありません。

問題をよりよくデバッグするには、Snoopをインストールして、そのテキストブロックにビジュアルツリーを移動することを検討してください。次に、TextBlockのプロパティを調べることができます。

+0

スヌープを使ってダウンロードして試してみましたが、テキストプロパティは表示されていたものに設定されていました。スヌープでプロパティを設定していることを確認する方法はありますか?バインディングはありません。手動で設定されているようです。 – Drew

+0

スヌープでは誰がプロパティを設定しているのか表示されません。しかし、Textプロパティを手動で設定している場合、そのテキストを変更する方法は非常に多くあります。一時的にスタイルと名前を削除しても、テキストは変わりませんか?あなたのコードビハインドのTextBox_MouseUpメソッドは、senderパラメータで何かをしますか? –

+0

申し訳ありませんが、あなたの編集を見ました。私はなぜそれが失敗しているのかわかりません。投稿されたコードは大丈夫です。私はそれがあなたが探している解決策ではないことを知っていますが、MVVMのアプローチはデバッグが簡単で、ほとんどがより良い設計アプローチと考えています。この場合、TextBlockを使用する代わりに、Buttonを使用することができます(同じようにスタイルを設定できます)。そのボタンはMouseUpイベントの代わりにCommandパターンを実装できます。また、コンテンツはビューモデル上のプロパティにバインドされている可能性があります。これは、プロパティセッターにブレークポイントを配置することで簡単にデバッグできます。 –

関連する問題