不知道这是不是最好的"这样做的方式。 我正在学习MVVM的概念,对此感到抱歉。
我有4个按钮,我想在Rectangle中显示一个VisualBrush。 这是我的代码:
查看:
<Controls:MetroWindow.RightWindowCommands>
<Controls:WindowCommands Name="WindowCommand" ItemsSource="{Binding Model.WindowCommandItems}">
<Controls:WindowCommands.ItemTemplate>
<DataTemplate DataType="{x:Type ModelType:MainModel}">
<Button Command="{Binding Command}">
<StackPanel Orientation="Horizontal">
<Rectangle Width="20"
Height="20">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{Binding Icon}" />
</Rectangle.OpacityMask>
</Rectangle>
<TextBlock Margin="4 0 0 0"
VerticalAlignment="Center"
Text="{Binding Header}" />
</StackPanel>
</Button>
</DataTemplate>
</Controls:WindowCommands.ItemTemplate>
</Controls:WindowCommands>
</Controls:MetroWindow.RightWindowCommands>
视图模型:
private void CreateWindowCommands() {
var myResourceDictionary = new ResourceDictionary();
myResourceDictionary.Source =
new Uri("/BlackBoxBot;component/Resources/Icons.xaml",
UriKind.RelativeOrAbsolute);
Model.WindowCommandItems = new ObservableCollection<Models.MainModel.WindowCommandModel> {
new Models.MainModel.WindowCommandModel {
Header = "Viewer",
Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["users"] as Canvas}
},
new Models.MainModel.WindowCommandModel {
Header = "Home",
Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["appbar_home"] as Canvas }
},
new Models.MainModel.WindowCommandModel {
Header = "Dashboard",
Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["theater"] as Canvas }
},
new Models.MainModel.WindowCommandModel {
Header = "Einstellungen",
Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["settings"] as Canvas }
}
};
......
型号:
[PropertyChanged.ImplementPropertyChanged]
public class WindowCommandModel {
public string Header { get; set; }
public ICommand Command { get; set; } = new RoutedCommand();
public VisualBrush Icon { get; set; }
}
我的结果:
为什么我的图标没有显示?
答案 0 :(得分:1)
<VisualBrush Stretch="Fill" Visual="{Binding Icon}" />
VisualBrush.Visual期望对象的类型为Visual
您绑定到VisualBrush
。
Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["users"] as Canvas}
请改为尝试:
Icon = myResourceDictionary["users"] as Canvas