2017-12-07 4 views
0

画像が背景としてリンクされているテキストボックスがあります。base64をテキストボックスの背景として使用しますか?

この画像のbase64版を使用したいと思います。

私は非常に単純なウィンドウを使用しました.formは、base64を正しく動作させるためのコードを確実に行うために、正しく機能していました。

私が問題としている部分は、xamlでwpfスタイルのGUIをリンクしています。

<TextBox Name="OutTBox" Grid.Column="0" Grid.ColumnSpan="7" Grid.Row="4" Grid.RowSpan="6" Margin="20,5,20,20" Foreground="#FF8CFF8C" IsReadOnly="True" > 
    <TextBox.Background> 
     <ImageBrush ImageSource="C:\background.jpg" Stretch="UniformToFill"/> 
    </TextBox.Background> 
</TextBox> 

だからここに私は、Windowsフォームで使用BASE64言語は以下のとおりです。

Add-Type -AssemblyName PresentationFramework 

# Setup the XAML 
[xml]$script:xaml = '<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    Title="base64 image demo" Height="350" Width="650" Background="Black"> 
<Grid> 
    <Image Name="thisistheimage" Stretch="UniformToFill" /> 
</Grid> 
</Window>' 

# Create the form and set variables 
$script:form = [Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader $xaml)) 
$xaml.SelectNodes("//*[@Name]") | ForEach-Object { Set-Variable -Name ($_.Name) -Value $form.FindName($_.Name) -Scope Script } 

# here's the base64 string 

$base64 = "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" 

# Create a streaming image by streaming the base64 string to a bitmap streamsource 
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage 
$bitmap.BeginInit() 
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64) 
$bitmap.EndInit() 

# Freeze() prevents memory leaks. 
$bitmap.Freeze() 

# Set source here. Take note in the XAML as to where the variable name was taken. 
$thisistheimage.source = $bitmap 

# Show form 
$null = $form.ShowDialog() 

私はあなたに私の実際の画像を与えるだろうが、それは5kの行以上に長いです。ロードにはわずか1秒しかかかりません。 base64がXamlで読み込まれることを明確にする。私はそれらのグリッドコードからテキストボックスを削除し、それをbase64に置き換え、うまくロードします。 2人を一緒に働かせることはできません。

ありがとうございます!

+1

をテキストボックス? – Clemens

+0

はい、そうです。おそらく、私は解決策を探すときに間違った検索用語を使用しています。私は厳密にbase64の画像ソリューションを探してきました。 – Steve

答えて

0

私はPowerShellを使用したことがありませんが、それはこのような単純なする必要があります:あなたはのBackgroundプロパティにそれをImageBrushにビットマップを入れて割り当てる方法を知らないわけ

$brush = New-Object System.Windows.Media.ImageBrush 
$brush.ImageSource = $bitmap 

$thetextbox.Background = $brush 
+0

それは間違いなく働いた。 本当にありがとうございます。 私は恩知らずに聞こえるわけではありませんが、もっと統合された方法がありますか? – Steve

+0

ImageBrushには '$ bitmap'を渡すImageSourceパラメータを持つコンストラクタがあります。 PowerShellの構文については不明ですが、 '$ thetextbox.Background = New-Object System.Windows.Media.ImageBrush($ bitmap)'と書くこともできます。 – Clemens

+0

そして私を信じて、私はこれを試しました。私が答えをグーグルで探す前に、私は変数を画像ソースとして提示しようとしましたが、それは決して示されませんでした。 おそらく私が置いた場所は、base64変換が間違った場所にあったからです。 プレゼンテーションを読み込み、ビットマップ変換、xaml、そして最後に読者を読み込もうとしました。 guiはまったく読み込まれません。 私は解釈的なhere-stringを使用していますが、@ "@制限付きではありません。 私は現在、描画ブラシを潜在的な回答として見ていますが、見ていません。 – Steve

関連する問題