EventSetter - Visual Studio设计器中的错误XAML

时间:2010-06-08 08:24:47

标签: .net wpf events treeview

我已经使用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

3 个答案:

答案 0 :(得分:2)

看起来这是known bug。您可以通过简单地将StyleEventSetters移至主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