Привет, я выяснил, как создать шаблон кнопки изображения в C # WPF, и я наткнулся на
это . Это кажется мне действительно полезным, за исключением двух проблем:
- Я хочу иметь возможность динамически изменять изображения в коде C #, поскольку эта кнопка будет использовать изображения, которые я загружаю динамически через документы XML.
- ИСПРАВЛЕНО Я получаю сообщение об ошибке «Имя« InitializeComponent »не существует в текущем контексте». Вот мой код (обратите внимание, у меня нет отключенного изображения, только нажатой и нормальный. Normal.png и другой просто заполнители.
Я надеялся использовать это в нескольких местах, но я всегда могу создать несколько разных версий. Однако мне нужно, чтобы изображения загружались динамически, и я не могу выяснить, как заставить изображение, указанное в моем коде на C #, в основном действовать как кнопка. Спасибо
ПРИМЕЧАНИЕ. Я могу заставить кнопку работать хорошо, за исключением изменения части исходного изображения. этот код у меня сейчас.
<Button x:Class="CFYLauncher.PageNavButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image x:Name="NormalImg" Source="\img\btn_arrow.png"/>
<Image x:Name="PressedImg" Source="\img\btn_arrow_selected.png" Visibility="Hidden"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="NormalImg" Property="Visibility" Value="Hidden"/>
<Setter TargetName="PressedImg" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
с кодом
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;
namespace CFYLauncher
{
/// <summary>
/// Interaction logic for PageNavButton.xaml
/// </summary>
public partial class PageNavButton : Button
{
public PageNavButton()
{
InitializeComponent();
}
public string ImageUri
{
set
{
this.NormalImg.Source = new BitmapImage(value);
}
}
}
}
Как указано ниже в ответе на помощь Тома Карвера, у меня возникают две основные проблемы с этим кодом:
- «Ошибка 1« CFYLauncher.PageNavButton »не содержит определения для« NormalImg »и не найден метод расширения« NormalImg », принимающий первый аргумент типа« CFYLauncher.PageNavButton »(если вы пропустили директиву using или ссылка на сборку?)
- «Ошибка 2: наилучший перегруженный метод сопоставления для« System.Windows.Media.Imaging.BitmapImage.BitmapImage (System.Uri) »содержит недопустимые аргументы» и «Невозможно преобразовать строку» в «System.Uri»
Когда я изменяю 'public string ImageUri' на 'public Uri ImageUri', 2 ошибки в 2) исчезают, но он все равно не может найти NormalImg, что для меня не имеет смысла, потому что оно прямо там .. Должно быть, я упускаю что-то действительно очевидное