2017-04-04 8 views
0

これが「最良の」方法であるかどうかは分かりません。 私はMVVMの概念を学んでいます。申し訳ありません。MVVM VisualBrush Binding

私は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> 

のViewModel:

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; } 
    } 

マイ結果:

は、ここに私のコードです

なぜアイコンが表示されないのですか?

答えて

1
<VisualBrush Stretch="Fill" Visual="{Binding Icon}" /> 

VisualBrush.VisualオブジェクトはあなたがVisualBrushに結合されている

タイプVisual

であることを期待しています。

Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["users"] as Canvas} 

代わりにこれを試してみてください:

Icon = myResourceDictionary["users"] as Canvas