2016-08-31 10 views
0

ボタンのコンテンツイメージを変更すると、以前に定義されたレイアウトプロパティは無視されます。ボタンの内容を変更するとスタイルWPFが削除されます

私は何を疑うことはボタンのクリックイベントにthis.Contentを変更すると、それが修飾するという事実である:

<Button> 
    Everything found between these tags. 
</Button> 

そして、私のスタイルは、これらのタグの内側にあるように、それはそれを上書きします。

private void ChangeImageFile(object sender, RoutedEventArgs e) 
    { 
     OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Filter = "Image Files|*.png;*.jpeg;*.tiff;*.gif;*.bmp;*.jpg"; 
     ofd.FilterIndex = 1; 
     ofd.Multiselect = false; 
     bool? ok = ofd.ShowDialog(); 
     if(ok == true) 
     { 
      Image loaded = new Image(); 
      loaded.Source = new BitmapImage(new Uri(ofd.FileName)); 
      loaded.Height = 100; 
      this.Content = loaded; 
     } 
    } 

<Button x:Name="BookCover" Click="ChangeImageFile"> 
      <Button.Content> 
       <Image Source="Images/NewBook.png"/> 
      </Button.Content> 
      <Button.Style> 
       <Style TargetType="{x:Type Button}"> 
        ... LONG STYLE ... 
       </Style> 
      </Button.Style> 
     </Button> 
+1

あなたが書いた 'this.Content'は、' this'は何を指し? – user3185569

+0

あなたが述べたように、これはウィンドウを指しており、ページが開発中であったため、ウィンドウ内に他の要素が存在しなかったので、イメージが残っている唯一のものであることがわかりません。あなたのソリューションは機能します。 –

答えて

1

あなたがthis.Contentを使用している、これはボタンに現在のウィンドウを参照していない:ここでは

は、記録のためのコードです。名前でボタンにアクセスするか、送信者をキャストする必要があります。名前で

BookCover.Content = loaded; 

キャスト送信者は:

Button btn = (sender as Button); 
if(btn != null) 
    btn.Content = loaded; 
+0

OPがボタンクラスを拡張してこのロジックを実行するとどうなるでしょうか?どちらの場合も正しいです。 –

関連する問題