#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 };