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