2016-08-31 3 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; 

Cast отправитель:

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

Может быть правдой, но что, если OP расширяет класс кнопки и выполняет эту логику? В этом случае это правильно. –

Смежные вопросы