2010-06-08 43 views
2

我已經使用XAML完成了我的TreeView,但是現在我想用代碼隱藏來管理事件。 HierarchicalDataTemplate包含一個Image。我需要捕獲圖像上的事件MouseEnter/MouseLeave。我已經試過這樣:EventSetter - Visual Studio設計器中的錯誤XAML

<Image x:Name="imgArticolo" Source="{Binding imgArt}"> 
    <Image.Style> 
     <Style TargetType="{x:Type Image}"> 
      <EventSetter Event="MouseEnter" Handler="iArt_MouseEnter"/> 
     </Style> 
    </Image.Style> 
</Image> 

但在Visual Studio的設計師出現錯誤:「無法加載文件XAML與EventSetter」。

我該如何補救? 謝謝! Pileggi

回答

2

它看起來這是一個known bug。您可以通過簡單地用EventSetters移動Style到主Resources範圍,包括它在你的DataTemplate作爲StaticResource來解決它:

<Style x:Key="myImageStyle" TargetType="{x:Type Image}"> 
    <EventSetter Event="MouseEnter" Handler="iArt_MouseEnter"/> 
</Style> 
<HierarchicalDataTemplate x:Key="modTreeArtDataParts2"> 
    <Grid> 
     <Border x:Name="bdArt"> 
      <Image x:Name="imgArticolo" Source="{Binding imgArt}" Height="Auto" 
        Style="{StaticResource myImageStyle}" /> 
     </Border> 
    </Grid> 
</HierarchicalDataTemplate> 
+0

謝謝!!我喜歡這個論壇。這是我從未找到的最好的。它節省了我的(艱難)生活。 – lamarmora 2010-06-08 16:02:41

0

請問您能否提供更多的上下文?我無法重現你的錯誤在VS 2008中,有以下簡單的XAML:

<Window x:Class="WpfWindow.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
    <HierarchicalDataTemplate x:Key="template" 
           ItemsSource="{Binding Children}"> 
     <Image x:Name="imgArticolo" 
      Source="{Binding imgArt}"> 
     <Image.Style> 
      <Style TargetType="{x:Type Image}"> 
      <EventSetter Event="MouseEnter" 
         Handler="iArt_MouseEnter" /> 
      </Style> 
     </Image.Style> 
     </Image> 
    </HierarchicalDataTemplate> 
    </Window.Resources> 
    <Grid> 
    <TreeView ItemTemplate="{StaticResource template}"> 
     <TreeViewItem Header="Hey" /> 
    </TreeView> 
    </Grid> 
</Window> 

你用什麼版本的Visual Studio? DataContext中有什麼?您的數據模板位於何處?你如何參考它?注意:您也可以嘗試使用另一個Visual Studio實例附加失敗的設計器和調試器。不要忘記設置break on all exceptions。這可能會提供更多的真知灼見。

PPS:如果沒有什麼幫助,你可以用attached behavior來達到同樣的結果。

0

非常感謝你,如果我的信息不夠,我感到抱歉! 這是XAML代碼(清理了無關的所有內容),沒有被拒絕的行,效果很好。

<TreeView x:Name="tvArt" 
    ItemTemplate = "{DynamicResource modTreeArtDataParts}" 
    ItemsSource = "{Binding RicambiList, Source={StaticResource P_RicambiDataSource}}"/> 

<HierarchicalDataTemplate x:Key="modTreeArtDataParts" 
    ItemsSource = "{Binding RicambiItemList}" 
    ItemTemplate="{StaticResource modTreeArtDataParts2}"> 
    <Grid> 
     ... 
    </Grid> 
</HierarchicalDataTemplate> 

<HierarchicalDataTemplate x:Key="modTreeArtDataParts2"> 
    <Grid> 
     <Border x:Name="bdArt"> 
      <Image x:Name="imgArticolo" Source="{Binding imgArt}" Height="Auto"> 
     <!-- refused rows --> 
       <Image.Style> 
        <Style TargetType="{x:Type Image}"> 
         <EventSetter Event="MouseEnter" Handler="iArt_MouseEnter"/> 
        </Style> 
       </Image.Style> 
      </Image> 
     </Border> 
    </Grid> 
</HierarchicalDataTemplate> 

我使用Visual Studio專業版2008 SP1 DataContext的是2的ObservableCollection 一類的DataTemplate在Window.Reference

相關問題