2017-04-04 106 views
0

不知道这是否是“最好”的方式来做到这一点。 我正在学习MVVM的概念,对此深表歉意。MVVM VisualBrush绑定

我有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

为什么我的图标不显示?

回答

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