Tworzę RPG w WPF i C#. Mam przyciski ruchu z załączonymi obrazkami. Próbuję dowiedzieć się, jak zmienić obraz przycisku w zależności od tego, czy jest dostępne pomieszczenie, do którego można się przenieść w tym kierunku. Szukałem konwerterów, ale nie jestem pewien, jak je zaimplementować w mojej sytuacji.
Oto jeden przykład, który próbowałem zaimplementować, który znalazłem w Internecie:
<Button Content="{Binding MyBooleanValue, Converter={StaticResource
MyBooleanToImageConverter}}" />
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
bool v = (bool)value;
Uri path = new Uri((v ? "ImgSrcIfTrue.png" : "ImgSrcIfFalse.png"), UriKind.Relative);
return new Image()
{
Source = new System.Windows.Media.Imaging.BitmapImage(path),
Height = ...,
Width = ...,
};
}
Oto część kodu, nad którym pracuję
<!-- Movement Buttons -->
<Button Grid.Row="1" Grid.Column="1"
Click="OnClick_MoveNorth">
<StackPanel>
<Image Source= "/Image/Buttons/Up.png"/>
</StackPanel>
</Button>
Mam już funkcje dla wartości logicznych, próbuję tylko dowiedzieć się, jak zaimplementować konwerter, aby zmienić obraz przycisku.
Użyłem Boolean Visibility i mam nadzieję zrobić coś podobnego.
Visibility="{Binding HasMonster, Converter={StaticResource BooleanToVisibility}}"
1 odpowiedź
Lepiej powiąż właściwość Source elementu Image w treści przycisku:
<Button>
<Image Source="{Binding MyBooleanValue,
Converter={StaticResource MyBooleanToImageConverter}}"/>
</Button>
Konwerter bezpośrednio zwróci BitmapImage. Jeśli pliki obrazów mają być zasobami zestawu (tj. Są częścią projektu Visual Studio, a ich akcja kompilacji jest ustawiona na Zasób), należy je załadować z identyfikatorów URI pakietu:
public class BooleanToImageConverter : IValueConverter
{
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
var uri = (bool)value
? "pack://application:,,,/ImgSrcIfTrue.png"
: "pack://application:,,,/ImgSrcIfFalse.png";
return new BitmapImage(new Uri(uri));
}
public object ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
Możesz dodać konwerter do zasobów systemu Windows w następujący sposób:
<Window.Resources>
<local:BooleanToImageConverter x:Key="MyBooleanToImageConverter"/>
...
</Window.Resources>
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.