У меня есть шаблон для кнопок бокового меню, и я хочу добавить на кнопку иконку.
Вот мой ControlTemplate^
<ControlTemplate x:Key="SlideMenuButtons" TargetType="Button">
<Grid x:Name="Btn" Height="45">
<Border>
<StackPanel Orientation="Horizontal">
<Image Source="{DynamicResource ResourceKey = Img}"/>
</StackPanel>
</Border>
</Grid>
</ControlTemplate>
А вот сама кнопка в StackPannel:
<StackPanel Orientation="Vertical">
<Button Template="{StaticResource ResourceKey=SlideMenuButtons}" Click="Button_Click"
Content="КНОПКА">
<Button.Resources>
<ImageSource x:Key="Img">res/icons/personal_card.png</ImageSource>
</Button.Resources>
</StackPanel>
Если я правильно понял суть ошибки, то шаблон не сопоставляет имя ресурса Img c ключом x:Key=»Img» в ImageSource.
Я уже прочитал множество информации по этой ошибке и чаще всего советуют закрыть-удалить в корне программы .vs-открыть проект и пересобрать.
Не помогает, изменить имя пути к файлу тоже. Что ещё можно попробовать?
Сделал маленький тестовый проект. Там ошибок не возникает
Смысл простой — пользователь вводит в текстовое поле URI, если он корректен, кнопка становится доступна. Рисунок на кнопке становится цветным, если нет, кнопка не доступна, рисунок, чёрно-белый
В Windows Form «обесцвечивание» рисунка на кнопке происходит автоматом, здесь приходится писать лишний код. Или я ошибаюсь?
Кроме того при получении фокуса, если ссылка не корректна, текстовое поле очищается.
DataTrigger использовал потому что подумал — зачем писать лишний код на c#, если можно сделать то же самое в XAML с помощью триггеров
Образец нашёл здесь
{RelativeSource Mode=FindAncestor,AncestorType={x:Type Button} использовал для того чтоб привязаться к свойству родительской кнопки, так как кнопок будет несколько
С другой стороны для каждой кнопки будут свои иконки, соответственно свой стиль, так что моно написать так, привязываясь к имени конкретной кнопки
XML | ||
|
Так лучше?
————————-
Возвращаясь к основному проекту, следую вашему совету написал DependencyProperty
C# | ||
|
Как думаете что произошло?:-) То же самое. Код компилируется, работает, но та же ошибка «отсутствия» рисунка, только уже здесь
XML | ||
|
Сейчас думаю привязать Image Source к ViewModel и передавать соответствующие иконки уже из неё
0
Изучаю C# по книге «Head First C# Эндрю Стиллмен, Дженнифер Грин», сейчас остановился на создании UWP приложений с помощью XAML. Там затея заключается в том, чтобы упростить привязку свойства какого-либо тега к свойству указанного класса. Как раз-таки статический ресурс из такого класса я и пытаюсь сделать. В книге вот такой пример создания статического ресурса в виде класса из локального пространства имен:
<Page.Resources>
<local:MenuMaker x:Name="menuMaker"/>
</Page.Resources>
Но это не работает. Я пробовал писать x:Key, но результат такой же. Класс, из которого создаётся статический ресурс, имеет конструктор без параметров, что и требуется. При указании контекста данных тега Grid пробую использовать этот статический ресурс: пишет, что не удается разрешить такой ресурс. Нигде не могу найти ответ на свой вопрос. Так как же сделать так, чтобы все заработало?
Я нашел решение! Достаточно было просто запустить приложение, и все заработает!
I am making a game engine and I was codding a new UI and it is giving the following error «Error XDG0062 ‘StaticResourceExtension’ is not valid for Setter.Value. The only supported MarkupExtension types are DynamicResourceExtension and BindingBase or derived types.»
Here is the only code that was added since the last working build
ControlTemplate.xaml
<ResourceDictionary x:Class="Pico_Editor.Dictionaries.ControlTemplates"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Pico_Editor.Dictionaries">
<Style TargetType="{x:Type TextBox}" x:Key="TextBoxStyle">
<!-- TODO: define the look of textbox here -->
</Style>
<Style TargetType="{x:Type TextBox}" x:Key="{x:Type TextBox}" BasedOn="{StaticResource TextBoxStyle}">
<EventSetter Event="KeyDown" Handler="OnTextBox_KeyDown"/>
</Style>
<Style x:Key="PicoWindowStyle" TargetType="{x:Type Window}">
<Setter Property="BorderBrush" Value="{StaticResource Editor.Selected.BackgroundBrush}"/>
<Setter Property="Background" Value="{StaticResource Editor.Window.GrayBrush1}"/>
</Style>
</ResourceDictionary>
EditorColors.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Pico_Editor.Dictionaries">
<!-- Editor Colors -->
<Color x:Key="Editor.Window.GrayColor1"> #ff1f1f1f</Color>
<Color x:Key="Editor.Window.GrayColor2"> #ff262626</Color>
<Color x:Key="Editor.Window.GrayColor3"> #ff313131</Color>
<Color x:Key="Editor.Window.GrayColor4"> #ff404040</Color>
<Color x:Key="Editor.Window.GrayColor5"> #ff535353</Color>
<Color x:Key="Editor.Window.GrayColor6"> #ff6a6a6a</Color>
<Color x:Key="Editor.Disabled.FontColor"> #ff868686</Color>
<Color x:Key="Editor.FontColor"> #ffdddddd</Color>
<Color x:Key="Editor.RedColor"> #ffff5a6a</Color>
<Color x:Key="Editor.GreenColor"> #ff90ee90</Color>
<Color x:Key="Editor.BlueColor"> #ff80deff</Color>
<Color x:Key="Editor.OrangeColor"> #ffffd067</Color>
<Color x:Key="Editor.Selected.BackgroundColor"> #ff3c67b6</Color>
<!-- Editor Brushes -->
<SolidColorBrush Color="{StaticResource Editor.Window.GrayColor1}" x:Key="Editor.Window.GrayBrush1"/>
<SolidColorBrush Color="{StaticResource Editor.Window.GrayColor2}" x:Key="Editor.Window.GrayBrush2"/>
<SolidColorBrush Color="{StaticResource Editor.Window.GrayColor3}" x:Key="Editor.Window.GrayBrush3"/>
<SolidColorBrush Color="{StaticResource Editor.Window.GrayColor4}" x:Key="Editor.Window.GrayBrush4"/>
<SolidColorBrush Color="{StaticResource Editor.Window.GrayColor5}" x:Key="Editor.Window.GrayBrush5"/>
<SolidColorBrush Color="{StaticResource Editor.Window.GrayColor6}" x:Key="Editor.Window.GrayBrush6"/>
<SolidColorBrush Color="{StaticResource Editor.Disabled.FontColor}" x:Key="Editor.Disabled.FontBrush"/>
<SolidColorBrush Color="{StaticResource Editor.FontColor}" x:Key="Editor.FontBrush"/>
<SolidColorBrush Color="{StaticResource Editor.RedColor}" x:Key="Editor.RedBrush"/>
<SolidColorBrush Color="{StaticResource Editor.GreenColor}" x:Key="Editor.GreenBrush"/>
<SolidColorBrush Color="{StaticResource Editor.BlueColor}" x:Key="Editor.BlueBrush"/>
<SolidColorBrush Color="{StaticResource Editor.OrangeColor}" x:Key="Editor.OrangeBrush"/>
<SolidColorBrush Color="{StaticResource Editor.Selected.BackgroundColor}" x:Key="Editor.Selected.BackgroundBrush"/>
</ResourceDictionary>
I also added Style="{StaticResource PicoWindowStyle}"
to the window section of my main window
Any help will be appreciated I have no clue what the problem is and i cnat see anything wrong with the code
asked Oct 30, 2022 at 1:56
2
I forgot that xaml has top down code flow and my App.xalm file had
<ResourceDictionary Source="pack://application:,,,/Dictionaries/ControlTemplates.xaml"/>
on top of
<ResourceDictionary Source="pack://application:,,,/Dictionaries/EditorColors.xaml"/>
but it had to be the other way around
answered Oct 30, 2022 at 3:36
- Remove From My Forums
-
Вопрос
-
<Button Style=»{StaticResource EditAppBarButtonStyle}» Click=»Button_Click»/> не могу использовать данный ресурс и многие другие. Использую Studio 2013 и Windows 8.1. Читал на тех. сайте Microsoft, что файл с ресурсами
был удален в версии 8.1 и все встроено уже в систему. Поэтому что не так происходит, если нельзя использовать эти ресурсы.
Ответы
-
Вместо Button используйте класс AppBarButton (Represents
a templated button control to be displayed in an AppBar)-
Помечено в качестве ответа
13 августа 2013 г. 14:00
-
Помечено в качестве ответа