Как изменять картинку при наведении курсора в XAML?
Цитата: Андрей от 02.11.2022, 16:41Здравствуйте, я не нашёл отдельной темы по XAML, так что пишу сюда. Я делаю кастомную GUI и в момент когда надо было делать кнопки закрыть, свернуть, развернуть, я столкнулся с проблемой.
Я написал вот такой код.<Image Name="close" Width="20" Height="20" Margin="480,0,0,430" Cursor="Hand"> <Image.Style> <Style TargetType="{x:Type Image}"> <Setter Property="Source" Value="/YourAssembly;component/inz/krest_neact.xaml"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Source" Value="/YourAssembly;component/inz/krest_act.xaml"/> </Trigger> </Style.Triggers> </Style> </Image.Style> </Image>Я решил использовать вместо кнопки картинку, при наведении на неё мыши, она чуть светлела, что бы пользователь видел что на неё можно нажать. Вроде бы я все сделал правильно, но появляется такая ошибка. System.Windows.Markup.XamlParseException: ""Предоставление значения для "System.Windows.Baml2006.TypeConverterMarkupExtension" вызвало исключение.": номер строки "14" и позиция в строке "26"."
В роле картинок я решил использовать XAML файл, у меня есть подозрения что проблема из-за этого, но как по-другому использовать векторную графику, я не придумал. Все картинки отмечены, как ресурсы. Вот ссылка на весь проект, sln файл может не открывается, лучше открывайте csproj. Спасибо, я надеюсь вы поняли мою проблему,
Здравствуйте, я не нашёл отдельной темы по XAML, так что пишу сюда. Я делаю кастомную GUI и в момент когда надо было делать кнопки закрыть, свернуть, развернуть, я столкнулся с проблемой.
Я написал вот такой код.
<Image Name="close" Width="20" Height="20" Margin="480,0,0,430" Cursor="Hand">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/YourAssembly;component/inz/krest_neact.xaml"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="/YourAssembly;component/inz/krest_act.xaml"/>
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
Я решил использовать вместо кнопки картинку, при наведении на неё мыши, она чуть светлела, что бы пользователь видел что на неё можно нажать. Вроде бы я все сделал правильно, но появляется такая ошибка. System.Windows.Markup.XamlParseException: ""Предоставление значения для "System.Windows.Baml2006.TypeConverterMarkupExtension" вызвало исключение.": номер строки "14" и позиция в строке "26"."

Цитата: Viсtor от 02.11.2022, 17:47Андрей, Привет. x:Type Image - это по идее System.Windows.Controls.Image . Property="Source" которого System.Windows.Media.ImageSource . Соответственно туда без преобразования можно поместить только его производные классы (наследники).
Андрей, Привет. x:Type Image - это по идее System.Windows.Controls.Image . Property="Source" которого System.Windows.Media.ImageSource . Соответственно туда без преобразования можно поместить только его производные классы (наследники).
Цитата: Viсtor от 02.11.2022, 18:01Я возможно поторопился с ответом. Просто проект что-то не получается открыть.
Я возможно поторопился с ответом. Просто проект что-то не получается открыть.
Цитата: Viсtor от 02.11.2022, 19:03Андрей, ✋ Если тебя интересует похожий результат.
[spoiler title="Gif"]
[/spoiler]Необходимо добавлять через словарь ресурсов.
[spoiler title="Код"]<Grid> <Border Background="White"> <Border> <Image > <Image.Style> <Style TargetType="{x:Type Image}"> <Setter Property="Source" Value="{StaticResource krest_actDrawingImage}"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Source" Value="{StaticResource krest_neactDrawingImage}"/> </Trigger> </Style.Triggers> </Style> </Image.Style> </Image> </Border> </Border> <Application x:Class="WpfApp1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp1" StartupUri="MainWindow.xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Dictionary1.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> DrawingImage x:Key="krest_actDrawingImage"> //остальной код </DrawingImage> <DrawingImage x:Key="krest_neactDrawingImage"> //остальной код </DrawingImage> /// код xaml ресурсов </ResourceDictionary>[/spoiler]
Андрей, ✋ Если тебя интересует похожий результат.
Необходимо добавлять через словарь ресурсов.
<Grid>
<Border Background="White">
<Border>
<Image >
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="{StaticResource krest_actDrawingImage}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="{StaticResource krest_neactDrawingImage}"/>
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Border>
</Border>
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
DrawingImage x:Key="krest_actDrawingImage">
//остальной код
</DrawingImage>
<DrawingImage x:Key="krest_neactDrawingImage">
//остальной код
</DrawingImage>
/// код xaml ресурсов
</ResourceDictionary>
Цитата: Андрей от 02.11.2022, 23:38Viktor, Большое спасибо. Но я точно знаю, что это делается легче, в интернете полно примеров. Просто у меня почему-то они не работают.
Viktor, Большое спасибо. Но я точно знаю, что это делается легче, в интернете полно примеров. Просто у меня почему-то они не работают.
