Это не MahApps.Metro-specific, но это то, что я использую. У меня есть набор ViewModels, у которого есть свойство string
, представляющее, какой значок использовать из ресурсного файла XAML.Как использовать переменную ViewModel для DynamicResource?
public class CommandViewModel : ViewModel
{
public CommandViewModel(string displayName, ICommand command, string icon)
{
if (command == null)
throw new ArgumentNullException("command");
DisplayName = displayName;
Command = command;
Icon = icon;
}
public ICommand Command { get; private set; }
public string Icon { get; set; }
}
Icon
будет в конечном итоге что-то вроде "appbar_add" от MahApps.Metro.Resources. Они определены в файле Icons.xaml.
Как написать это в моем ItemTemplate
так, чтобы отображался правильный ресурс. Я либо получаю ошибки при выполнении (не при редактировании/сборке), либо вообще не получаю никаких значков.
«ничто не значок» XAML выглядит следующим образом:
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Rectangle Width="20" Height="20">
<Rectangle.Fill>
<VisualBrush Visual="{DynamicResource {Binding Path=Icon}}" />
</Rectangle.Fill>
</Rectangle>
<TextBlock Margin="15,6">
<Hyperlink Command="{Binding Path=Command}">
<TextBlock Text="{Binding Path=DisplayName}" />
</Hyperlink>
</TextBlock>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Мои попытки, вызвавших ошибки использовали StaticResource
, который я считаю в корне неправильным.
Как я могу ссылаться на свойство Icon
как на имя ресурса, который я хочу?
Редактировать
Больше кода было предложено, так вот пример того, что делает работы:
<Rectangle Width="20" Height="20">
<Rectangle.Fill>
<VisualBrush Visual="{StaticResource appbar_add}" />
</Rectangle.Fill>
</Rectangle>
Что мне нужно сделать, это позволить «appbar_add» быть значение из свойства на моем ViewModel - Icon
собственности выше.
ресурсы находятся в ResourceDictionary в отдельном файле (Icon.xaml) и выглядеть следующим образом:
<Canvas x:Key="appbar_add" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0">
<Path Width="38" Height="38" Canvas.Left="19" Canvas.Top="19" Stretch="Fill" Fill="{DynamicResource BlackBrush}" Data="F1 M 35,19L 41,19L 41,35L 57,35L 57,41L 41,41L 41,57L 35,57L 35,41L 19,41L 19,35L 35,35L 35,19 Z "/>
</Canvas>
Полезная ссылка: http://stackoverflow.com/questions/20564862/binding-to-resource-key-wpf – dugas