MVVM VisualBrush 绑定
MVVM VisualBrush Binding
不知道这是否是 "best" 的方法。
我正在学习 MVVM 的概念,对此感到抱歉。
我有 4 个按钮,我想在一个矩形内显示一个 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; }
}
我的结果:
Result
为什么我的图标没有显示?
<VisualBrush Stretch="Fill" Visual="{Binding Icon}" />
VisualBrush.Visual 期望对象的类型为 Visual
您正在绑定 VisualBrush
。
Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["users"] as Canvas}
试试这个:
Icon = myResourceDictionary["users"] as Canvas
不知道这是否是 "best" 的方法。 我正在学习 MVVM 的概念,对此感到抱歉。
我有 4 个按钮,我想在一个矩形内显示一个 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; }
}
我的结果:
Result
为什么我的图标没有显示?
<VisualBrush Stretch="Fill" Visual="{Binding Icon}" />
VisualBrush.Visual 期望对象的类型为 Visual
您正在绑定 VisualBrush
。
Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["users"] as Canvas}
试试这个:
Icon = myResourceDictionary["users"] as Canvas