2

現在、サーバーのファイル構造に基づいてデータベースから結果を取得するデータグリッドがあります。そこで、PDFとPPTを作成し、それらをディレクトリにロードして、それに応じてそのデータベースに追加します。次に、ユーザーは必要なものを検索でき、結果がデータグリッドに表示されます。その特定の部分の各PDFおよびPPTに関連する画像ハイパーリンクボタンがある2つの列があります。

次に、ユーザーがPDFアイコンまたはPPTアイコンをクリックすると、別のウィンドウに高解像度の部分が表示されます。問題はありませんが、ユーザーがアイコンにカーソルを合わせると、tooptip内の高解像度部分のプレビューが表示されるようにしたいと思います。画像をツールチップにハードコーディングできます。問題ありません。そのため、その側面では、各PDF/PPTの小さなサムネイルプレビュー画像を作成しました。それらはすべて正しくサイズ設定されており、すぐに使用できます。基本的に各高解像度ドキュメントの「サムネイル」プレビューが表示されるように、場所をツールチップにバインドする必要があります。

これが私のXAMLです。

<sdk:DataGridTemplateColumn x:Name="imageColPdf" Header="PDF" Width="SizeToHeader" IsReadOnly="False">
   <sdk:DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
               <HyperlinkButton HorizontalAlignment="Center" VerticalAlignment="Center" DataContext="{Binding Path=FileName}" Click="HyperlinkButtonPDF_Click" >
                     <Image Source="/PrintOnDemand;component/Images/16x16/page_white_acrobat.png" Stretch="None"  HorizontalAlignment="Center" ></Image>
                          <ToolTipService.ToolTip>
                              <ToolTip>
                                   <ToolTip.Content>
                                       <Image DataContext="{Binding Path=FileName}" Name="LoadPDFImage" Loaded="PDFImageToolTip"/>
                                   </ToolTip.Content>
                               </ToolTip>
                           </ToolTipService.ToolTip>
                       </HyperlinkButton>
                   </DataTemplate>
               </sdk:DataGridTemplateColumn.CellTemplate>
           </sdk:DataGridTemplateColumn>

次に、ツールチップが読み込まれた画像イベントのコードビハインドを示します。

private void PDFImageToolTip(object sender, RoutedEventArgs e)
    {

        string docname = ((System.Windows.FrameworkElement)((e.OriginalSource as Image).DataContext)).ToString();
        string baseUri = "http://localhost:51840/ShowDocument.aspx?DocumentName=" + docname + "&type=pdfjpg";
        var hostingWindow = HtmlPage.Window;
        hostingWindow.Navigate(new Uri(baseUri, UriKind.Absolute), "_blank");
    }

クリックイベントでこのメソッドを実行して高解像度ドキュメントを呼び出しましたが、ツールチップから画像を読み込もうとすると、デバッグするたびにエラーが発生し(System.NullReferenceException)、オブジェクト参照がのインスタンスに設定されていませんオブジェクト。画像の正しいファイル名/ソースパスを取得できないようです。文字列docnameでは毎回失敗します。さて、私の質問は、どうすればそれを適切に通過させて、すでに設定した画像を表示させることができるかということです。

4

1 に答える 1

1

ToString()を呼び出す前にDataContextをFrameworkElementにキャストしているようですが、それは意図されたものですか?

string docname =((System.Windows.FrameworkElement)((e.OriginalSource as Image).DataContext))。ToString();

また、このハンドラーの送信者はImageインスタンスである必要があります。おそらく、これはあなたにより良いサービスを提供するでしょう:

String docname = ((FrameworkElement)sender).DataContext.ToString()

次に、HyperLinkBut​​tonでのDataContextバインディングは、確かにあなたに有利なことをしていません。完全に削除する必要があります。現在、BindingはFileName文字列でFileNameプロパティを探します。

または、ImageからDataContextバインディングを削除すると、機能するはずです。

于 2012-07-30T22:25:16.200 に答える