2016-05-13 18 views
1

私はこの問題を解決するのに苦労しています。私は、プレビューモードのボタンを操作しようとしています。& MouseEnter &私のバインドされたリストボックス内のMouseLeaveイベント。現在WPFを学習しています。バインドされたリストボックス内のハンドルイベント

イメージは、他のコントロールを含むリストボックス内にあります。ここでは、説明のために画像を示します。

私の問題は、彼らがDataTemplateの内部にあり、私はそれらを扱う傾ける理由thatsのため2つの画像コントロールが背後にあるコードでは知られていないです。

enter image description here

相続人は私のXAMLコード:あなたが最初の引数として渡されたイメージコントロールを取得するイベントをフックする場合

<ListBox Name="ListBoxDownload" Height="414" Width="729" Canvas.Left="-3" Visibility="Collapsed"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Canvas Height="89" > 
       <Canvas Height="86" Width="11" Background="#FFC33232" Canvas.Left="-2"/> 
       <ProgressBar Width="694" Canvas.Left="20" Canvas.Top="76" Height="10" Value="{Binding Value, UpdateSourceTrigger=PropertyChanged}" Maximum="{Binding Maximum}" Minimum="0"/> 
       <Label Foreground="White" FontFamily="/SpotWatch;component/Resources/Fonts/#Montserrat Light" FontSize="18" Content="{Binding Name}" Canvas.Left="14" Canvas.Top="-4"/> 
       <Label Foreground="#FFC3BDBD" FontFamily="/SpotWatch;component/Resources/Fonts/#Montserrat Ultra Light" FontSize="14" Content="{Binding Artist}" Canvas.Left="14" Canvas.Top="25"/> 
       <Label Foreground="#FF8D8D8D" FontFamily="/SpotWatch;component/Resources/Fonts/#Montserrat Ultra Light" FontSize="12" Content="{Binding Status}" Canvas.Left="14" Canvas.Top="50"/> 
       <Image Name="ImageDeleteSong" Source="/Resources/Images/SpotWatch.Delete.png" Canvas.Left="675" Canvas.Top="6" Width="17" Height="19" MouseEnter="ImageDeleteSong_MouseEnter" MouseLeave="ImageDeleteSong_MouseLeave" PreviewMouseLeftButtonDown="ImageDeleteSong_PreviewMouseLeftButtonDown"/> 
       <Image Name="ImageRemoveSong" Source="/Resources/Images/SpotWatch.Remove.png" Canvas.Left="697" Canvas.Top="6" Width="17" Height="19" MouseEnter="ImageRemoveSong_MouseEnter" MouseLeave="ImageRemoveSong_MouseLeave" PreviewMouseLeftButtonDown="ImageRemoveSong_PreviewMouseLeftButtonDown"/> 
      </Canvas> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

あなたはすべての –

+0

何が問題で、問題を説明していませんか?教えて。 – ViVi

+0

申し訳ありませんが私はそれをうまく説明した場合は、編集 –

答えて

0

画像は、背後にあるコードで知られる必要はありません。あなたはただそれをキャストする必要があります。

ボタンでイメージをラップし、Commandをバインドし、必要に応じてCommandParameterバインドを介して何かを渡します。 (通常は、イベントを避け、ビューモデルのコマンドをバインドします。)


どうしてあなたはイメージにアクセスする必要がありますか?それはあなたがする必要があるものではありません。それらを変更する必要がある場合は、それぞれのプロパティをバインドし、バインドされたデータを変更する必要があります。


は、あなたがコメントで言ったことを考えると、これは私がどうなるのかです:

public SomeViewModel() 
{ 
    _deleteUser = new DelegateCommand(user => 
     Users.Remove((Person)user) 
    ); 
} 

private readonly ObservableCollection<Person> _Users; 
public ObservableCollection<Person> Users { get { return _Users; } } 

private readonly DelegateCommand _deleteUser; 
public DelegateCommand DeleteUser { get { return _deleteUser; } } 
<ItemsControl ItemsSource="{Binding Users}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <!-- Some content here --> 
       <Button Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, 
             Path=DataContext.DeleteUser}" 
         CommandParameter="{Binding}">Remove</Button> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

キーポイント:

  1. は、リストのレベルでコマンドを削除します。
  2. ボタンはそれにバインドしますRelativeSource
  3. 現在のアイテム({Binding})をパラメータとして渡します。
  4. パラメータをキャストしてリストから削除します。

DelegateCommandICommandの簡単なデリゲートベースの実装である、あなたがウェブ上での実装例を見つけることができます。)

+0

私はそれ以上の問題を明確にすることはできません参照してください。 –

+0

は私のリストボックスの1項目だけですので、画像コントロールであるアイコンをクリックして削除/削除しようとしています –

+0

@iNCEPTiON_:注意したように、私はそのための 'Command'ボタンを使います。また、これはアイテムのアクションではなく、ビューモデルのレベルアップです。 –

関連する問題