Как добавить изображение в Togglebutton без использования XAML?

#c# #wpf #togglebutton

#c# #wpf #togglebutton

Вопрос:

Я пытаюсь добавить изображение в togglebutton в WPF — C #. Дело в том, что назначение, над которым я работаю, вообще не может быть выполнено с использованием XAML. Я пытался присвоить свойству Content значение image, но все, что я получаю, это обычный togglebutton, который совсем не помогает моему делу.

     myToggleButton = new ToggleButton();
    myImage = new Image();
    BitmapImage bmi = new BitmapImage();
    bmi.BeginInit();
    bmi.UriSource = new Uri("myImageResource.bmp", UriKind.Relative);
    bmi.EndInit();
    myImage.Source = bmi;
    myToggleButton.Content = myImage;
  

Надеюсь, я предоставил достаточно информации, если нет, пожалуйста, запросите больше.

Обновлено @Phil Wright:

Когда я объявляю изображение, подобное этому:

     myImage = new Image();
    BitmapImage bmi = new BitmapImage();
    bmi.BeginInit();
    bmi.UriSource = new Uri("myImageResource.bmp", UriKind.Relative);
    bmi.EndInit();
    myImage.Source = bmi;
  

это работает…

Обновление @Matt West:

     myGrid.Children.add(MyToggleButton); // This gives me an empty ToggleButton
    myGrid.Children.add(MyImage); // This gives me an image with content
  

Комментарии:

1. Просматривая последние две строки, вы явно столкнулись с ошибкой. Вам следует попробовать сделать это в чистом проекте и посмотреть, сможете ли вы даже воспроизвести это в контролируемых условиях.

2. Попробовать что? и что воспроизвести?

3. Ваша чертова проблема, конечно…

4. Не хочу показаться грубым или что-то в этом роде, но вам нужно быть более конкретным. Что вы предлагаете мне сделать? Этот код взят из свежего чистого проекта, где единственными файлами в проекте являются файл .cs и 4 растровых изображения.

5. Вы могли бы сказать, что на самом деле сделали то, что я предложил в вашем предыдущем комментарии, я предположил, что вы пытались сделать это в запутанной среде. Но это странно, поскольку я вообще не могу это воспроизвести, для меня это работает так, как ожидалось, и, как я отметил, эти последние две строки вообще не имеют смысла.

Ответ №1:

Вы создаете новую кнопку переключения, но вы ни к чему ее не добавляете. Изображение добавляется к кнопке переключения, но сама кнопка переключения ни к чему не добавляется как дочерняя. Вам либо нужно добавить кнопку переключения в коде позади с чем-то вроде этого:

 this.AddChild(myToggleButton);
  

Или, если у вас уже есть кнопка переключения, определенная в XAML с именем myToggleButton, удалите эту строку из вашего кода выше

 myToggleButton = new ToggleButton();
  

Комментарии:

1. Поможет ли это, если вы укажете ширину и высоту кнопки переключения?

2. Не совсем. Определение ширины и высоты изменяет только размер кнопок. Ничего не произойдет, если я определю ширину и высоту для изображения

Ответ №2:

Как и было запрошено, вот код, который работает для меня полностью:

 <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Name="_Root">

    </Grid>
</Window>
  
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var tb = new ToggleButton();
            var image = new Image();
            BitmapImage bmi = new BitmapImage();
            bmi.BeginInit();
            bmi.UriSource = new Uri("/Images/6.png", UriKind.Relative);
            bmi.EndInit();
            image.Source = bmi;
            tb.Content = image;
            _Root.Children.Add(tb);
        }
    }
}
  

Где изображение является ресурсом; как отмечалось ранее, эти последние две строки не имеют смысла, если вы можете заставить изображение отображаться само по себе, оно также должно отображаться внутри кнопки.

Комментарии:

1. Смотрите, это странно! Потому что я просто скопировал вставленный ваш код в свой projct, и он все еще не работает. Думаю, у меня есть некоторые проблемы с настройками в моем VS. Спасибо, что попытались!

Ответ №3:

Вы уверены, что предоставленный ресурс bitmap можно найти. Если нет, то изображение будет пустым и поэтому не займет места, и, следовательно, кнопка переключения выглядит пустой.

Ответ №4:

изображение кнопки переключения может быть установлено следующим образом:

 ToggleButton tgb = new ToggleButton();
BitmapImage bmi = new BitmapImage();
bmi.BeginInit();
bmi.UriSource = new Uri("myImageResource.bmp", UriKind.Relative);
bmi.EndInit();
tgb.Content = new Image { Source = bmi };