2016-10-12 5 views
0


クラスには8つのBitmapImageが配列に格納されています。
画像は、クラスのコンストラクタで次のように追加されます:
ボタンイメージの設定と変更WPF、C#

public SymbolCollection(string[] symbolNames) 
     { 
      Symbols = new BitmapImage[8]; 

      for (int i = 0; i < Symbols.Length; i++) 
      { 
       Symbols[i] = new BitmapImage(); 
       Symbols[i].BeginInit(); 
       Symbols[i].UriSource = new Uri(@"/Resources/" + symbolNames[i] + ".png", UriKind.Relative); 
       Symbols[i].EndInit(); 
      } 

     } 


ボタンのImageSourceは次のように設定されています

<Button x:Name="buttonPlayer1" HorizontalAlignment="Left" Height="80" Margin="44,387,0,0" VerticalAlignment="Top" Width="80" Click="OnPlayerSymbolClick"> 
      <Button.Template> 
       <ControlTemplate> 
        <Image Source="{Binding Content}"/> 
      </ControlTemplate> 
      </Button.Template> 
     </Button> 

私はボタンに画像を設定しようとしましたMainWindow()メソッドを呼び出してOnPlayerSymbolClick()メソッドで変更しますが、画像も表示されません。

public MainWindow() 
{ 
    this.InitializeComponent(); 
    SetSymbolCollection(); 

    Uri u = symbolCollectionHolder[0].Symbols[0].UriSource; 
    Debug.WriteLine(u.ToString()); 
    Image i = new Image(); 
    BitmapImage bmp = new BitmapImage(); 
    bmp.UriSource = u; 
    i.Source = bmp; 
    buttonPlayer1.Content = i; 
} 


private void OnPlayerSymbolClick(object sender, RoutedEventArgs e) 
{ 
    ImageBrush imagebrush = new ImageBrush(); 
    imagebrush.ImageSource = symbolCollectionHolder[0].Symbols[1]; 
    buttonPlayer1.Background = imagebrush; 
    buttonPlayer1.Content = imagebrush; 
    Debug.WriteLine(buttonPlayer1.Background.ToString()); 
    Debug.WriteLine(imagebrush.ImageSource.ToString()); 
} 

png-sのビルドアクションはリソースに設定され、プロジェクトにはリソースフォルダがあります。

答えて

0

画像リソースファイルは、背後にあるコードでのBitmapImageにロードするとき、あなたはResource File Pack URI使用する必要があります。ボタンのことのほかに

Symbols[i] = new BitmapImage(new Uri(
    "pack://application:,,,/Resources/" + symbolNames[i] + ".png")); 

を、コンテンツや背景のプロパティを設定することが無意味ですテンプレートはこれらのプロパティを使用しません。

<Button x:Name="buttonPlayer1" ...> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Image Source="{TemplateBinding Content}"/> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

ボタンのコンテンツの値としてImageSource(または派生オブジェクト)が必要になります。

は、おそらくこのようなテンプレートを書きたかったです。

あなたが直接あなたのシンボルのいずれかを渡すことができます。TemplateBindingのコンテンツの変更で

buttonPlayer1.Content = Symbols[0]; 
+0

を、すべてが動作します。どうもありがとうございました! –

関連する問題