我已经使用XAML完成了我的TreeView,但现在我想管理一个带有代码隐藏的事件。 HierarchicalDataTemplate包含一个Image。我需要在Image上捕获MouseEnter / MouseLeave事件。我试过这样的方式:
<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的设计者中出现错误:“无法使用EventSetter加载文件XAML”。
我该如何补救? 谢谢! Pileggi
答案 0 :(得分:2)
看起来这是known bug。您可以通过简单地将Style
与EventSetters
移至主Resources
范围并将其作为DataTemplate
包含在StaticResource
中来解决此问题:< / p>
<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>
答案 1 :(得分:0)
请您提供一些上下文?我无法使用以下简单的XAML在VS 2008中重现您的错误:
<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中有什么?您的数据模板位于何处?你怎么称呼它?
PS:您还可以尝试从另一个Visual Studio实例使用调试器附加到失败的设计器。不要忘记设置break on all exceptions。这可能会提供更多关于那里真实情况的见解。
PPS:如果没有什么可以帮助您,可以使用attached behavior来获得相同的结果。
答案 2 :(得分: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 Professional 2008 SP1 DataContext是一个带有2个ObservableCollection的类 DataTemplate位于Window.Reference
中